自动机器学习框架之一_Auto-Sklearn
Posted 算法学习分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动机器学习框架之一_Auto-Sklearn相关的知识,希望对你有一定的参考价值。
当我们做完了特征工程之后,就可以代入模型训练和预测,对于模型的选择及调参,主要根据分析者的经验。在具体使用时,经常遇到同一批数据,同一种模型,不同的分析者得出的结果相差很多。
前面学习了几种常用的机器学习方法原理以及适用场景,对于完全没有经验的开发者,只要有足够时间,尝试足够多的算法和参数组合,理论上也能达到最优的训练结果,同理程序也能实现该功能,并通过算法优化该过程,自动寻找最优的模型解决方案,即自动机器学习框架。
我们将在未来的三周里分别为大家介绍三个常用的机器学习框架:auto-sklearn、auto-ml 和 auto-keras。
Auto-Sklearn主要基于sklearn机器学习库,使用方法也与之类似,这让熟悉sklearn的开发者很容易切换到Auto-Sklearn。在模型方面,除了sklearn提供的机器学习模型,还加入了xgboost算法支持;在框架整体调优方面,使用了贝叶斯优化。
1. 安装
Auto-sklearn需要基于python3.5以上版本,且依赖swig,因此需要先安装该库,具体方法如下:
$ sudo apt-get install build-essential swig
$ pip install auto-sklearn
由于关于auto-sklearn的文档和例程不多,推荐下载auto-sklearn的源码,并阅读其中的example和doc,以便更多地了解auto-sklearn的功能和用法。
$ 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。
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等方法。
以上是关于自动机器学习框架之一_Auto-Sklearn的主要内容,如果未能解决你的问题,请参考以下文章
Auto-Sklearn:使用 AutoML 加速你的机器学习模型