auto-sklearn: 基于sklearn/ AutoML 方向/ 免费自动机器学习服务/ GitHub开源/ 2.4k+ stars!!!⭐
适读人群:有机器学习算法基础

学完 Machine Learning,又要学 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
  • 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!),论文链接:Efficient and Robust Automated Machine Learning
  • ClimbsRocks/auto_ml,可以读一下代码学习如何写pipeline
  • autokeras,基于keras的 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 是什么操作?

?poster

  • 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到底长啥样:
    ?论文链接:Initializing Bayesian Hyperparameter Optimization via Meta-Learning
    ?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
    • Bayesian Optimization

      • 能利用先验知识高效地调节超参数
      • 通过减少计算任务而加速寻找最优参数的进程
      • 不依赖人为猜测所需的样本量为多少,优化技术基于随机性,概率分布
      • 在目标函数未知且计算复杂度高的情况下极其强大
      • 通常适用于连续值的超参,例如 learning rate, regularization coefficient
    • SMAC
    • TPE

在 auto-sklearn 里,一直出现的 bayesian optimizer 就是答案。是利用贝叶斯优化进行自动调参的。
?具体的贝叶斯优化原理链接
?论文链接

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
  • 官方文档?
  • 接口文档?
  • 举个栗子?
  • 再举个栗子?
  • 使用套路如下:

    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

auto-sklearn详解相关推荐

  1. hibernate.hbm2ddl.auto配置详解

    hibernate.hbm2ddl.auto配置详解 http://www.cnblogs.com/feilong3540717/archive/2011/12/19/2293038.html hib ...

  2. auto关键字详解 C++

    C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...

  3. C++中的 auto类型详解

    auto是c++程序设计语言的关键字.用于两种情况 (1)声明变量时根据初始化表达式自动推断该变量的类型 (2)声明函数时函数返回值的占位符 参考文章:c++ auto类型用法总结

  4. hibenate.hbm2ddl.auto属性详解

    hibernate配置属性中,hibernate.hbm2ddl.auto可以帮助你实现正向工程,即由java代码生成数据库脚本,进而生成具体的表结构.      在hibernate.cfg.xml ...

  5. Nhibernate.hbm2ddl.auto配置详解

    hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下: <properties> <property name="hibernat ...

  6. width和height的默认值auto与%详解(附案例)。

    结论 点击这里有一篇关于width与height文章 width的%:定义基于包含块(父元素)宽度的百分比宽度,会突破父级的限制 width的auto:尽量被父级包裹 height的%:基于包含它的块 ...

  7. [C++11] auto关键字详解

    文章目录

  8. 【C++ 学习 ①】- C++ 入门知识(上万字详解)

    目录 一.历史 1.1 - C 语言的发展历程 1.2 - C++ 发展历程 二.C++ 关键字(C++98) 三.命名空间 3.1 - 命名空间的定义 3.2 - 命名空间的使用 四.C++ 输入& ...

  9. sklearn 随机分割数据_sklearn.ensemble.RandomForestClassifier 随机深林参数详解

    随机森林是一种元估计量,它适合数据集各个子样本上的许多决策树分类器,并使用平均数来提高预测准确性和控制过度拟合.子样本大小由max_samples参数bootstrap=True (default)控 ...

  10. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

最新文章

  1. 【模板】树状数组 2
  2. ASP.NET网站建设基本常用代码
  3. jsp 中的js 与 jstl 运行的先后顺序
  4. 【以太坊】搭建测试网络之ubuntu系统安装node.js
  5. JS格式化JSON串显示在表格中
  6. Dataset:fetch_20newsgroups(20类新闻文本)数据集的简介、安装、使用方法之详细攻略
  7. python算法实现源码_python 实现A_算法的示例代码
  8. centos移动文件到指定目录_Dynamo批量分离中心文件并另存到指定目录
  9. 划痕实验 迁移面积自动统计_从Jupyter迁移到合作实验室
  10. Linux I2C核心、总线与设备驱动(一)
  11. bzoj1207 [HNOI2004]打鼹鼠
  12. 即时游戏中用户信息融合的研究
  13. Andriod+SpringBoot 图书馆管理系统
  14. 战地2142 我喜欢...
  15. mac升级node版本(用n升级nodejs)
  16. 华清远见嵌入式Linux就业培训班
  17. 【基础逻辑】对位乘法与升多项式子项根号——柯西不等式
  18. 京东图书架构设计有感
  19. C#获取http请求的JSON数据并解析
  20. 斗鱼直播Android开发二面被刷,赶紧收藏!

热门文章

  1. Python字符串删除指定符号(不限位置)
  2. python中字典的几种定义方式
  3. QML使用Python的函数
  4. matlab输入数组出曲线,用鼠标画出曲线,并将曲线所经过的点保存到数组中
  5. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)
  6. c/c++ 结构体前加不加typedef有什么区别?
  7. VMware虚拟机:桥接、NAT、Host-only(仅主机)上网方式的区别
  8. python enumerate()函数
  9. Ubuntu16.04安装NVIDIA显卡(RTX20系列)驱动+CUDA10.0+cudnn+Pytorch1.1.0
  10. 王道计算机考研 数据结构 (查找-下)