张怡作家

Auto Machine Learning 主动化板滞进修条记

适读人群:有板滞进修算法根底

1. auto-sklearn 能 auto 到什么境地?

板滞进修中的分类模子中:

  • 常规 ML framework 如下图灰色部分:导入数据-数据清洗-特征工程-分类器-输出预测值

  • auto部分如下图绿色方框:ML framework 左边新增 meta-learning,右边新增 build-ensemble,关于调超参数,用的是贝叶斯优化。

    • 主动进修样本数据: meta-learning,去进修样本数据的式样,主动引荐适宜的模子。比如文本数据用什么模子比较好,比如许众的离散数据用什么模子好。

    • 主动调超参:Bayesian optimizer,贝叶斯优化。

    • 主动模子集成: build-ensemble,模子集成,一般的竞赛中都会用到的本领。众个模子组合成一个更强更大的模子。往往能进步预测准确性。

  • CASH problem: AutoML as a Combined Algorithm Selection and Hyperparameter optimization (CASH) problem

也便是说,一般的分类或者回归的板滞进修模子即将或者曾经完成了低门槛或者零门槛以致免费修模的程度。

实板滞进修的每个方法都可以向兹釉动化偏向开展,而且主动化的方法又有许众种。

板滞进修主动化的难点照旧数据清洗和特征工程这些本领,至于模子筛选、模子集成和超参数调参曾经有比较成熟可用的代码了。

我们的愿景是 人人都可以用得起板滞进修系统 有没有很google!

2. 目前有哪些公司做AutoML,github上又有哪些开源项目?

业界 automl 上的希望:

  • Google: Cloud AutoML, Google’s Prediction API  

    https://cloud.google.com/automl/

  • Microsoft: Custom Vision, Azure Machine Learning

  • Amazon: Amazon Machine Learning

  • others: BigML.com, Wise.io, SkyTree.com, RapidMiner.com, Dato.com, Prediction.io, DataRobot.com

github上的开源项目:

  • auto-sklearn (2.4k stars!) 

    https://github.com/automl/auto-sklearn

    论文链接:

    http://papers.nips.cc/paper/5872-efficient-and-robust-automated-machine-learning.pdf

  • ClimbsRocks/auto_ml,可以读一下代码进修怎样写

    pipeline  https://github.com/ClimbsRocks/auto_ml

  • autokeras,基于keras的 automl 向开源项目http://codewithzhangyi.com/2018/07/26/AutoML/

3. auto-sklearn的全体框架了解一下?

呃…先凑活看吧,精细的可以到github上翻看文献构造。
框架的主轴第二列,第二列的精髓pipeline,pipeline的要点components:

  • 16 classifiers(可以被指定或者筛选,include_estimators=[“random_forest”, ])

    • adaboost, bernoulli_nb, decision_tree, extra_trees, gaussian_nb, gradient_boosting, k_nearest_neighbors, lda, liblinear_svc, libsvm_svc, multinomial_nb, passive_aggressive, qda, random_forest, sgd, xgradient_boosting

  • 13 regressors(可以被指定或者筛选,exclude_estimators=None)

    • adaboost, ard_regression, decision_tree, extra_trees, gaussian_process, gradient_boosting, k_nearest_neighbors, liblinear_svr, libsvm_svr, random_forest, ridge_regression, sgd, xgradient_boosting

  • 18 feature preprocessing methods(这些进程可以被手动关合通通或者部分,include_preprocessors=[“no_preprocessing”, ])

    • densifier, extra_trees_preproc_for_classification, extra_trees_preproc_for_regression, fast_ica,feature_agglomeration, kernel_pca, kitchen_sinks, liblinear_svc_preprocessor, no_preprocessing, nystroem_sampler, pca, polynomial, random_trees_embedding, select_percentile, select_percentile_classification, select_percentile_regression, select_rates, truncatedSVD

  • 5 data preprocessing methods(这些进程不行被手动关合)

    • balancing, imputation, one_hot_encoding, rescaling, variance_threshold(看到这里曾经有点惊喜了!点进去有不少实质)

  • more than 110 hyperparameters
    此中参数include_estimators,要搜寻的方法,exclude_estimators:为不搜寻的方法.与参数include_estimators不兼容
    而include_preprocessors,可以参考手册中的实质

auto-sklearn是基于sklearn库,于是会有惊艳强大的模子库和数据/特征预处理库,专业身世的设定。

4. meta-learning 是什么操作?

https://ml.informatik.uni-freiburg.de/papers/15-AAAI-MI-SMBO-poster.pdf

  • What is MI-SMBO?
    Meta-learning Initialized Sequential Model-Based Bayesian Optimization

  • What is meta-learning?
    Mimics human domain experts: use configurations which are known to work well on similar datasets

    • 模仿人能积聚体验的做法,使板滞有[配备空间]去记载它们的体验值,有点像迁移进修

    • 适用的程度,依据数据的相似度

    • meta-learning: warmstart the Bayesian optimization procedure

也便是进修算法工程师的修模习气,比如看到什么类型的数据就会清楚套用什么模子比较适合,去生产关于数据的 metafeatures

  • 左边:黑色的部分是标准贝叶斯优化流程,血色的是添加meta-learning的贝叶斯优化

  • 右边:有 Metafeatures for the Iris dataset,描画数据长什么样的features,下面的公式是盘算数据集与数据集的相似度的,只消发明相似的数据集,就可以依据履本来引荐好用的分类器。再来张大图感觉下metafeatures终究长啥样:
    论文链接

    http://aad.informatik.uni-freiburg.de/papers/15-AAAI-MI-SMBO.pdf
    supplementary.pdf

    http://codewithzhangyi.com/2018/07/26/AutoML/www.automl.org/aaai2015-mi-smbo-supplementary.pdf

5. auto-sklearn 怎样完成 主动超参数调参?

看法标明

  • 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


    • 能应用先验常识高效地调治超参数

    • 通过淘汰盘算义务而加速寻找最优参数的历程

    • 不依赖人工猜念所需的样本量为众少,优化技能基于随机性,概率分布

    • 目标函数未知且盘算繁杂度高的状况下极其强大

    • 一般适用于延续值的超参,比如 learning rate, regularization coefficient

    • Bayesian Optimization

    • SMAC

    • TPE

auto-sklearn 里,不停呈现的 bayesian optimizer 便是谜底。是应用贝叶斯优化举行主动调参的。

精细的贝叶斯优化原理链接

http://codewithzhangyi.com/2018/07/31/Auto%20Hyperparameter%20Tuning%20-%20Bayesian%20Optimization/

论文链接

https://pdfs.semanticscholar.org/681e/518fd8e3e986ba25bc1fb33aac8873b521e7.pdf

6. auto-sklearn 怎样完成 主动模子集成?

官方答复:automated ensemble construction: use all classifiers that were found by Bayesian optimization
目前库中有16个分类器,依据贝叶斯优化寻得最佳分类器组合,比如是(0.4 random forest + 0.2 sgd + 0.4 xgboost)
可以依据fit完的分类器打印结果看最终的模子是由什么分类器构成,以及它们的参数数值:

1
2
3
4
5
import autoskleran.classification
automl = autosklearn.classification.AutoSklearnClassifier()
automl.fit(X_train, y_train)

automl.show_models()

打印automl.show_models()就能打印出所谓的主动集成模子有哪些,权重分布,以及超参数数值。


7. 怎样运用 auto-sklearn?

适用系统:Linux

installation

http://automl.github.io/auto-sklearn/stable/installation.html

官方文档

http://automl.github.io/auto-sklearn/stable/index.html

接口文档

http://automl.github.io/auto-sklearn/stable/api.html

举个栗子

 http://automl.github.io/auto-sklearn/stable/manual.html        

运用套道如下:

1
2
3
4
5
6
7
# 4行代码搞定
import autosklearn.classification
automl = autosklearn.classification.AutoSKlearnClassifier()
automl.fit(X_train, y_train)
predictions = automl.predict(X_test)   # 打印出0,1结果

predictions_prob = automl.predict_proba(X_test)  # 打印出0-1之间的概率值

亲测 X_train, y_train 内不行含有非数值型数据,比如Male/Female字母就报错。

教练集有哪些特征,测试集就必需有哪些特征,可以了解为不做特征筛选,以是最初导入教练集的特征越粗拙越好。

1
automl.cv_results_

会打印出十分十分众的东西,耐心看,会找到相似下面的法则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
automl.sprint_statistics()


# 打印结果如下:
# 'auto-sklearn results:
#  Dataset name: 46b7545efa67d8cd76f70e71eb67b72e
#  Metric: accuracy
#  Best validation score: 0.955932
#  Number of target algorithm runs: 1278
#  Number of successful target algorithm runs: 1252
#  Number of crashed target algorithm runs: 23
#  Number of target algorithms that exceeded the time limit: 3
#  Number of target algorithms that exceeded the memory limit: 0'

automl._get_automl_class()

# 打印结果
# autosklearn.automl.AutoMLClassifier

其他可以实验的操作:

1
2
3
4
5
automl.score(X,y)

automl.get_models_with_weights()

automl.get_configuration_space(X,y)

8. auto-sklearn 目前有什么缺陷

  • 不支撑深度进修,可是貌似会有AutoNet出来,像谷歌的cloud AutoML那样

  • 盘算时长往往一个小时以上

  • 数据清洗这块还需求人工到场,目前对非数值型数据不友好

9. AutoML 的开展状况

跟着谷歌发布它们的 Cloud AutoML 种种惊艳的功用,关于这块的体恤度会越来越高的吧~
machine learning的竞赛曾经缺乏为奇啦,现曾经有许众相关AutoML的竞赛了:
http://automl.chalearn.org/

CodeWithZhangYi
CodeWithZhangYi

Coding is the new sexy

http://codewithzhangyi.com/
初学主动化板滞进修
5
暂无评论
暂无评论~