自动机器学习框架之一 _Auto-Sklearn

  当我们做完了特征工程之后,就可以代入模型训练和预测,对于模型的选择及调参,主要根据分析者的经验。在具体使用时,经常遇到同一批数据,同一种模型,不同的分析者得出的结果相差很多。

  前面学习了几种常用的机器学习方法原理以及适用场景,对于完全没有经验的开发者,只要有足够时间,尝试足够多的算法和参数组合,理论上也能达到最优的训练结果,同理程序也能实现该功能,并通过算法优化该过程,自动寻找最优的模型解决方案,即自动机器学习框架。

  我们将在未来的三周里分别为大家介绍三个常用的机器学习框架:auto-sklearn、auto-ml 和 auto-keras。

 Auto-Sklearn 主要基于 sklearn 机器学习库,使用方法也与之类似,这让熟悉 sklearn 的开发者很容易切换到 Auto-Sklearn。在模型方面,除了 sklearn 提供的机器学习模型,还加入了 xgboost 算法支持;在框架整体调优方面,使用了贝叶斯优化。

(转载请注明出处:https://www.jianshu.com/p/cd775730a1ec)

1. 安装

 Auto-sklearn 需要基于 python3.5 以上版本,且依赖 swig,因此需要先安装该库,具体方法如下:

1
2
$ sudo apt-get install build-essential swig
$ pip install auto-sklearn

  由于关于 auto-sklearn 的文档和例程不多,推荐下载 auto-sklearn 的源码,并阅读其中的 example 和 doc,以便更多地了解 auto-sklearn 的功能和用法。

1
$ git clone https://github.com/automl/auto-sklearn.git

2. Auto-Sklearn 的优缺点

  通常情况下,我们只能依据个人的经验,基于机器性能、特征多少、数据量大小、算法以及迭代次数来估计模型训练时间,而 Auto-Sklearn 支持设置单次训练时间和总体训练时间,使得工具既能限制训练时间,又能充分利用时间和算力。

 Auto-Sklearn 支持切分训练/测试集的方式,也支持使用交叉验证。从而减少了训练模型的代码量和程序的复杂程度。另外,Auto-Sklearn 支持加入扩展模型以及扩展预测处理方法,具体用法可参见其源码 example 中的示例。

  其缺点是 Auto-Sklearn 输出携带的信息较少,如果想进一步训练只能重写代码。

3. 举例

  本例使用 96 年美国大选数据,将”投票 vote”作为因变量,它有只 0/1 两种取值,因此使用分类方法 AutoSklearnClassifier,例程中将训练时间指定为两分钟,模型指定为只选择随机森机 random_forest,训练后输出其在训练集上的打分 score。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import autosklearn.classification
import statsmodels.api as sm

data = sm.datasets.anes96.load_pandas().data
label = 'vote'
features = [i for i in data.columns if i != label]
X_train = data[features]
y_train = data[label]
automl = autosklearn.classification.AutoSklearnClassifier(
time_left_for_this_task=120, per_run_time_limit=120, # 两分钟
    include_estimators=["random_forest"])
automl.fit(X_train, y_train)
print(automl.score(X_train, y_train))
# 返回结果: 0.94173728813559321
# 谢彦技术博客

4.关键参数

 Auto-sklearn 支持的参数较多,以分类器为例,参数及其默认值如下图所示:

  下面介绍其常用参数,分为四个部分:

(1) 控制训练时间和内存使用量

  参数默认训练总时长为一小时(3600),一般使用以下参数按需重置,单位是秒。

  • time_left_for_this_task:设置所有模型训练时间总和
  • per_run_time_limit:设置单个模型训练最长时间
  • ml_memory_limit:设置最大内存用量

(2) 模型存储

  参数默认为训练完成后删除训练的暂存目录和输出目录,使用以下参数,可指定其暂存目录及是否删除。

  • tmp_folder:暂存目录
  • output_folder:输出目录
  • delete_tmp_folder_after_terminate:训练完成后是否删除暂存目录
  • delete_output_folder_after_terminate:训练完成后是否删除输出目录
  • shared_mode:是否共享模型

(3) 数据切分

  使用 resampling_strategy 参数可设置训练集与测试集的切分方法,以防止过拟合,用以下方法设置五折交叉验证:

  • resampling_strategy='cv'
  • resampling_strategy_arguments={'folds': 5}

  用以下方法设置将数据切分为训练集和测集,其中训练集数据占 2/3。

  • resampling_strategy='holdout',
  • resampling_strategy_arguments={'train_size': 0.67}

(4) 模型选择

  参数支持指定备选的机器学习模型,或者从所有模型中去掉一些机器学习模型,这两个参数只需要设置其中之一。

  • include_estimators:指定可选模型
  • exclude_estimators:从所有模型中去掉指定模型

 auto-sklearn 除了支持 sklearn 中的模型以外,还支持 xgboost 模型。具体模型及其在 auto-sklearn 中对应的名称可通过查看源码中具体实现方法获取,通过以下目录内容查看支持的分类模型:autosklearn/pipeline/components/classification/,可看到其中包含:adaboost、extra_trees、random_forest、libsvm_svc、xgradient_boosting 等方法。