万壑松风知客来,摇扇抚琴待留声
说明:本文记录关于 Auto-Sklearn 的基础概念,目的在于帮助使用者快速上手和查阅相关知识。
1. 简介
Auto-Sklearn 是一款由 Frank Hutter 等人设计的自动调参工具。特点 开源免费自动机器学习服务 ,适用于有一定机器学习相关知识基础的人员,自动的核心是使用 SMAC 算法。
Auto-Sklearn 运行原理官方英文文献地址可以参考这里。
2. 安装 Auto-Sklearn
官方安装地址,不过如果按照官方的介绍可能并不能安装成功,所以这里将我的安装过程记录下来。
环境配置(我是用的是 ubuntu-19.04-desktop-amd64 + Anaconda3):
- Linux operating system (for example Ubuntu) (get Linux here),
- Python (>=3.5) (get Python here).
- C++ compiler (with C++11 supports) (get GCC here) and
- SWIG (version 3.0 or later) (get SWIG here).
安装:
首先安装 swig3.0,官方提供的顺序和方法安装版本不正确,参考文章如下做:
1
2
3
4
5
6
7
8# 若有移除原swig,防止版本低于3.0
$ apt-get remove swig
# 安装3.0版本
$ apt-get install swig3.0
# 创建软连接,将swig指向swig3.0
$ ln -s /usr/bin/swig3.0 /usr/bin/swig
# 安装了swig(通过swig其它语言能调用C++底层库)才能保证pyrfr能正常安装
使用官方提供的方法安装 Auto-Sklearn 所必须要的环境库:
1
2# 若失败,重新执行命令,直到成功安装
$ curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install
安装 Auto-Sklearn
1
$ pip install auto-sklearn
3. Auto-Sklearn 的 auto
说明:由于官方和很多资料大多以分类问题作为样例讲解,所以本文也以分类作为介绍样例。不过值得注意的是,分类与回归在 Auto-Sklearn 中流程原理几乎相同,差别在于调用相关对象、误差函数、机器学习基础模型等地方,稍加注意即可。
既然定义于自动化机器学习,所以先来看看 auto 部分。文献中的一张流程图概括了 Auto-Sklearn 的工作流程:

ML 流程:
- 灰色部分:常规的 ML 正如上面灰色部分所描述。
数据导入-数据预处理-特征工程-分类器模型-预测目标值输出。 - 绿色部分:这部分主要就是 Auto-Sklearn 的 auto 地方。框架左边加入了
meta-learning(元学习),中间对于模型超参数的选择加入了Bayesian optimizer(贝叶斯优化),右边加入了build ensemble(模型集成)。
流程中实现了模型的自动调参、集成等功能。在数据工程、特征工程等方面做了一定简单处理,但还是很难有一个复杂完整的自动化实现。不过后面会介绍虽然这个特征工程简单却会带来一个不错的效果。
4. SMAC
超参数调优是 ML 建模优化过程的一个重点,同时也是一个较为复杂的点。模型有一个好的参数才能在训练数据上表现好,在测试数据上泛化能力强。
概念解释
- SMBO: Sequential Model-based Bayesian/Global Optimization,调超参的大多数方法基于SMBO
- SMAC: Sequential Model-based Algorithm Configuration,机器学习记录经验值的配置空间
- TPE: Tree-structured Parzen Estimator
超参数调参方法:
- Grid Search 网格搜索/穷举搜索
在高维空间不实用。 - Random Search 随机搜索
很多超参是通过并行选择的,它们之间是相互独立的。一些超参会产生良好的性能,另一些不会。 - Heuristic Tuning 手动调参
经验法,耗时长。 - Automatic Hyperparameter Tuning
- Bayesian Optimization
- 能利用先验知识高效地调节超参数
- 通过减少计算任务而加速寻找最优参数的进程
- 不依赖人为猜测所需的样本量为多少,优化技术基于随机性,概率分布
- 在目标函数未知且计算复杂度高的情况下极其强大
- 通常适用于连续值的超参,例如 learning rate, regularization coefficient
- SMAC
- TPE
- Bayesian Optimization
在 auto-sklearn 里,一直出现的 bayesian optimizer 就是答案。是利用贝叶斯优化进行自动调参的。
SMAC 是一种强大的黑箱调优算法,对超参数进行迭代优化从而进一步选出能够使得在这种参数下,模型的某种指标最好的超参数。meta-learning 方法能够加速该过程,所以 Auto-Sklearn 中也加入了 meta-learning 。
5. meta-learning
meta-learning) 存在于 Auto-Sklearn 的目的在于为整个迭代过程选取一个收敛点的初始值,加快 SMAC 算法的收敛。有点像迁移学习,积累经验使机器有[配置空间]去记录它们的经验值。
在安装的 Auto-Sklearn 文件下原作者已经将已有的 meta-learning 数据库存入了文件中,这些初始值是原作者通过优化其它类似数据集后(部分可能是手动优化)总结出来的数据库。每个文件夹都存有 指标+模型特征+任务类型 所对应的超参数初始值。如下图:

在程序运行时,通过选择与当前训练数据集接近的前 k 个优化结果作为初始值,加入到 SMAC 算法中进行继续迭代优化,进而加速 SMAC 算法的收敛速度。所以meta-learning 从根本上并没有直接解决这个优化问题,不过根据经验的出一个较好的初始值能变相的加快这个过程,从而达到减少时间的消耗。同时,当所给时间不足完成整个过程时,auto-sklearn 会直接给出 meta-learning 的值。这个值虽然不是 SMAC 能给出的最好结果,但依旧是一个效果不错的超参选择。
6. Bayesian optimizer
贝叶斯优化原理可以参考这里。
7. ensemble
在 auto-sklearn 中训练模型和集成模型是少数的多线程过程,其它流程几乎都处于单线程过程。在 auto-sklearn 的参数中模型集成数量默认为 ensemble=50 ,并且集成方法使用了 Rich Caruana 在 04 年 icml 上所提出的集成模型方法,所以具体的集成过程如下所示:
- 选取一张 50 个空白项的表,表中的每一项权重都初始化为 0.02 (和为 1 )。
- 从已有的模型库中选取一个可以提升表性能的模型加入到表中,或者替换掉一个性能不佳的旧模型。
- 重复步骤 2 直到最大迭代数。
- 将表中相同模型的的权重累积到此模型在集成模型中的权重。
8. 关于 Auto-Sklearn
Auto-Sklearn 目前有 5 种数据预处理的的方式,且这些过程不像模型选择、特征处理,是不能被关闭的。
- balancing, imputation, one_hot_encoding, rescaling, variance_threshold
还有超过 110 种超参数。
通过一些做过相关分析的人验证 Auto-Sklearn 通常情况下都能得到更好的效果,并且与一些商业框架相比还能技高一筹。原因可能有这两点:
- Auto-Sklearn 通过 meta-learning 在较短时间内找到相对较好的初始配置选项,并以此作为基准进行迭代容易超过很多现有工具和平台。
- 尽管特征工程和数据预处理方法相对简单,但是每个处理的参数都带入了 SMAC 整个迭代中进行调参调优,从而将每个简单的处理效果发挥到了极致。
9. 结语
Auto-Sklearn 应该算是一个十分良心、优秀的框架了。不过仍有不足的点,例如目前暂时不支持深度学习、计算时间长、数据清洗和特征工程还不够自动。当然团队还在不断的维护中,就在写完这篇记录时 Auto-Sklearn 又更新到了 0.6.0 了,所以保持期待吧。
后续如果有相关内容将进行补充和说明。。。