Auto-Sklearn-使用简介

万壑松风知客来,摇扇抚琴待留声

说明:本文记录关于 Auto-Sklearn 的基础概念,目的在于帮助使用者快速上手和查阅相关知识。

1. 简介

Auto-Sklearn 是一款由 Frank Hutter 等人设计的自动调参工具。特点 开源免费自动机器学习服务 ,适用于有一定机器学习相关知识基础的人员,自动的核心是使用 SMAC 算法。

Auto-Sklearn 运行原理官方英文文献地址可以参考这里

2. 安装 Auto-Sklearn

官方安装地址,不过如果按照官方的介绍可能并不能安装成功,所以这里将我的安装过程记录下来。

环境配置(我是用的是 ubuntu-19.04-desktop-amd64 + Anaconda3):

安装:

  1. 首先安装 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能正常安装
  2. 使用官方提供的方法安装 Auto-Sklearn 所必须要的环境库:

    • 1
      2
      # 若失败,重新执行命令,直到成功安装
      $ curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install
  3. 安装 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

超参数调参方法:

  1. Grid Search 网格搜索/穷举搜索
    在高维空间不实用。
  2. Random Search 随机搜索
    很多超参是通过并行选择的,它们之间是相互独立的。一些超参会产生良好的性能,另一些不会。
  3. Heuristic Tuning 手动调参
    经验法,耗时长。
  4. Automatic Hyperparameter Tuning
    • Bayesian Optimization
      • 能利用先验知识高效地调节超参数
      • 通过减少计算任务而加速寻找最优参数的进程
      • 不依赖人为猜测所需的样本量为多少,优化技术基于随机性,概率分布
      • 在目标函数未知且计算复杂度高的情况下极其强大
      • 通常适用于连续值的超参,例如 learning rate, regularization coefficient
    • SMAC
    • TPE

在 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 上所提出的集成模型方法,所以具体的集成过程如下所示:

  1. 选取一张 50 个空白项的表,表中的每一项权重都初始化为 0.02 (和为 1 )。
  2. 从已有的模型库中选取一个可以提升表性能的模型加入到表中,或者替换掉一个性能不佳的旧模型。
  3. 重复步骤 2 直到最大迭代数。
  4. 将表中相同模型的的权重累积到此模型在集成模型中的权重

8. 关于 Auto-Sklearn

Auto-Sklearn 目前有 5 种数据预处理的的方式,且这些过程不像模型选择、特征处理,是不能被关闭的。

  • balancing, imputation, one_hot_encoding, rescaling, variance_threshold

还有超过 110 种超参数。

通过一些做过相关分析的人验证 Auto-Sklearn 通常情况下都能得到更好的效果,并且与一些商业框架相比还能技高一筹。原因可能有这两点:

  1. Auto-Sklearn 通过 meta-learning 在较短时间内找到相对较好的初始配置选项,并以此作为基准进行迭代容易超过很多现有工具和平台。
  2. 尽管特征工程和数据预处理方法相对简单,但是每个处理的参数都带入了 SMAC 整个迭代中进行调参调优,从而将每个简单的处理效果发挥到了极致。

9. 结语

Auto-Sklearn 应该算是一个十分良心、优秀的框架了。不过仍有不足的点,例如目前暂时不支持深度学习、计算时间长、数据清洗和特征工程还不够自动。当然团队还在不断的维护中,就在写完这篇记录时 Auto-Sklearn 又更新到了 0.6.0 了,所以保持期待吧。

后续如果有相关内容将进行补充和说明。。。

参考:Auto Machine Learning笔记