构建一个典型的机器学习项目,一般分成以下步骤:
收集原始数据、合并数据源、清洗数据、特征工程、模型构建、超参数调优、模型验证和设备部署。
整个过程中,模型构建最能体现创造力,而最耗时的,要数特征工程和超参数调优。
于是,有时候会因为赶时间,过早将模型从实验阶段转移到生产阶段,导致它们发挥不出最佳效果;也有时候,会因为花了太多时间调优导致部署延迟。
这时候,就体现出了自动机器学习(Automatic machine learning, AML)框架的价值。
自动机器学习框架能帮助数据科学家减轻负担,降低特征工程和超参数调优的工作量,让他们能花更多时间来尝试模型架构。快速验证可能的方案不仅能让数据科学家很快地评估目标数据集,也能提供基准性能用以改进。
本文尽可能全面地介绍现有的自动机器学习框架,也附上了对应的代码地址。
综述
我们对现有的自动机器学习开源框架展开了充分调研,它们一般作用于机器学习的单个或多个步骤。
自动机器学习框架能够处理项目中一部分步骤,包括模型构建、特征工程和超参数优化。因此,我们分析了一些成熟框架,它们宣称能优化其中某些任务组合。
我们挑选出一些能够容易应用到企业数据科学团队的函数库。在介绍每个框架时,我们都给出了它的建库目标、使用的统计方法和将其与新项目或现有项目整合时要考虑的主要因素。
局部解决方案
现有的自动机器学习框架中,有些只解决了数据科学流程的单个步骤。虽然它们不提供端到端的解决方案,但是这些库侧重于使用先进方法来解决特定问题或是在带有独特约束的特定环境下操作,因此仍值得考虑。
特征工程
1. Featuretools
https://github.com/Featuretools/featuretools
1347星,139 Forks,119 Commits
最新版本为0.1.21,2018.5.30更新
Featuretools是一个自动特征工程的工具,它可以根据一组相关的表来自动构造特征。这个开源库是一个面向企业客户的商用前端服务的子集。
Featuretools使用了一种叫做深度特征合成(Deep Feature Synthesis, DFS)的算法,这个算法能遍历通过关系数据库中模式描述的关系路径。当DFS遍历这些路径时,它通过数据操作(包括求和、取平均值和计数)生成合成特征。
例如,它可以把求和操作应用到给定客户端ID的事务列表,将它们聚合成一列。虽然这只是一个简单的单次操作,但这个算法可以遍历到更深层的特征。
这个库的优势,在于其可靠性和在处理时间序列数据时处理信息泄露的能力。
2. Boruta-py
https://github.com/scikit-learn-contrib/boruta_py
318星,82 Forks,62 Commits
最新版本为0.1.5,2017.3.5更新
Boruta-py是Brouta特征降维策略的一种实现,以“全相关”方式来解决问题。
这种算法能保留对模型有显著贡献的所有特征,这与很多特征降维方法使用的“最小最优特征集”思路相反。
Boruta方法先对目标特征进行随机重新排序并组成合成特征,然后在原始特征集上训练简单的决策树分类器,再在特征集中把目标特征替换成合成特征,用这三个步骤来确定特征重要性。
其中,不同特征对应的性能差异可用于计算它们的相对重要性。
3. Categorical-encoding
https://github.com/scikit-learn-contrib/categorical-encoding
494星,115Forks,171 Commits
最新版本1.2.6,2018.1.22更新
这个库扩展了许多分类编码方法,可作为Scikit-learn中数据转换器的接口。
它还实现了常见的分类编码方法,如one-hot编码和hash编码,以及很多niche编码方法(包括base n编码和target编码)。
该函数库常用来处理实际问题中的分类变量,如可能带高变量基数的问题。它还能直接与pandas数据帧共用、计算缺失值和处理可能在训练集之外的变换值。
4. Tsfresh
https://github.com/blue-yonder/tsfresh
2781星, 340 Forks ,243 Commits
最新版本0.11.0,2017.10.14更新
这个库专注于时间序列数据的特征生成,它由一个德国零售分析公司支持,是他们数据分析流程中的一步。
它能提取出一系列用于描述时间序列趋势的形态特征,这些特征中包括一些简单特征(如方差)和复杂特征(近似熵)。
这个库能从数据中提取趋势特征,让机器学习算法更容易地解释时间序列数据集。它使用假设检验来获取大量生成特征集,并将其减少到少量最具解释性的趋势特征。
Tsfresh还与pandas和sklearn兼容,可嵌入到现有的数据科学流程中。Tsfresh库的优势在于其可扩展的数据处理实现,这部分已经在具有大量时间序列数据的生产系统中进行了测试。
5. Trane
https://github.com/HDI-Project/Trane
4星, 1 Fork, 245 Commits
最新版本0.1.0,2018.2.2更新
这个库是麻省理工学院HDI项目的产品。
Trane库可用来处理存储在关系数据库中的时间序列数据,和表示时间序列问题。它能列举出关于数据集的元信息,数据科学家能从数据库中的时间序列数据中提取这些特征来构建有监督问题。
这个过程存储在JSON文件中,数据科学家能改写这个文件来描述列和数据类型。该框架通过处理这个文件来生成可能的预测问题,这些问题能用于修改数据集。
这个项目对feature-tools库很有帮助,可用来以半自动方式生成额外特征。
6. FeatureHub
https://github.com/HDI-Project/FeatureHub
32星,5 Forks ,249 Commits
最新版本0.3.0,2018.5.9更新
这个项目也是麻省理工学院HDI实验室的,它建立在JupyterHub(支持多用户的 Jupyter Notebook服务器)上,让数据科学家在特征工程开发过程中能协作。
这个系统能自动对生成特征评分,以确定当前模型的总体价值。这种以众包方式进行特征工程和机器学习的方法,在测试时也取得了很好效果。
超参数优化
1. Skopt
https://scikit-optimize.github.io/
880星,340 Forks ,173 Commits
最新版本0.5.2,2018.3.25更新
Skopt是一个超参数优化库,包括随机搜索、贝叶斯搜索、决策森林和梯度提升树。
这个库包含一些理论成熟且可靠的优化方法,但是这些模型在小型搜索空间和良好的初始估计下效果最好。
2. Hyperopt
https://github.com/hyperopt/hyperopt-sklearn
2161星,473 Forks,939 Commits
最新版本0.1,2016.11.20更新
Hyperopt是一个超参数优化库,针对具有一定条件或约束的搜索空间进行调优,其中包括随机搜索和Tree Parzen Estimators(贝叶斯优化的变体)等算法。
它使用MongoDb作为存储超参数组合结果的中心结构,可实现多台电脑的并行计算。
这个库是用hyperopt-sklearn和hyperas实现的,这两个用于模型选择和优化的函数库分别建立在scikit-learn和keras的基础上。
3. Simple(x)
https://github.com/chrisstroemel/Simple,362星, 22 Forks,4 Commits
需手动安装
Simple(x)是一个优化库,可作为贝叶斯优化的替代方法。
Simple(x)和贝叶斯搜索一样,试图以尽可能少的样本进行优化,但也将计算复杂度从n³降低到log(n),这对大型搜索空间非常有用。
这个库使用单形(n维三角形),而不是超立方体(n维立方体),来模拟搜索空间,这样做可以避开贝叶斯优化中具有高计算成本的高斯过程。
4. Ray.tune
https://github.com/ray-project/ray/tree/master/python/ray/tune
3435星,462 Forks,1,707 Commits
最新版本0.4.0,2018.3.27更新
Ray.tune是一个超参数优化库,主要适用于深度学习和强化学习模型。它结合了许多先进算法,如Hyperband算法(最低限度地训练模型来确定超参数的影响)、基于群体的训练算法(Population Based Training,在共享超参数下同时训练和优化一系列网络)、Hyperopt方法和中值停止规则(如果模型性能低于中等性能则停止训练)。
这些都运行在Ray分布式计算平台上,这让它具有很强的扩展性。
5. Chocolate
https://github.com/AIworx-Labs/chocolate
26星,26 Forks,196 Commits
需手动安装
Chocolate是一个分布式超参数优化库(支持计算机集群的并行运算且无需中央主机),它使用通用数据库来联合执行各个任务。
它还支持网格搜索、随机搜索、准随机搜索、贝叶斯搜索和自适应协方差矩阵进化策略。它的优势体现在它支持受约束的搜索空间和多损失函数优化(多目标优化)。
6. GpFlowOpt
https://github.com/GPflow/GPflowOpt
102星,27 Forks ,407 Commits
最新版本0.1.0,2017.9.11更新
GpFlowOpt是一个基于GpFlow库的高斯过程优化器,可使用TensorFlow在GPU上运行高斯过程任务。
你如果要用到贝叶斯优化且有可用的GPU计算资源,那GpFlowOpt库应该是理想之选。
7. FAR-HO
https://github.com/lucfra/FAR-HO
有22星, 5 Forks,110 Commits
需手动安装
FAR-HO库运行在TensorFlow上,包含一系列基于梯度的优化器,包括Reverse-HG和Forward-HG。
这个库旨在构建TensorFlow中基于梯度的超参数优化器的访问,允许在GPU或其他张量优化计算环境中进行深度学习模型的训练和超参数优化。
8. Xcessiv
https://github.com/reiinakano/xcessiv
1055星,76 Forks,316 Commits
最新版本0.5.1,2017.8.10更新
Xcessiv库支持大规模模型开发、执行和集成。它的优势在于能够在单个GUI界面中管理多个机器学习模型的训练、执行和评估。
它具有多个集成工具来组合这些模型,以实现最佳性能。它包括一个贝叶斯搜索参数优化器,这个优化器支持高级别并行计算,还支持与TPOT库的集成。
9. HORD
https://github.com/ilija139/HORD
52星,8 Forks,33 Commits
需手动安装
HORD是一个用于超参数优化的独立算法,它能为需要优化的黑盒模型生成一个代理函数,并用它来生成最接近理想状态的超参数组合,以减少对整个模型的评估。
与Tree Parzen Estimators、SMAC和高斯过程方法相比,它始终具有更高的一致性和更低的错误率,而且这个方法特别适用于极高维数据分析。
10. ENAS-pytorch
https://github.com/carpedm20/ENAS-pytorch
848星, 135 Forks,33 Commits
需手动安装
ENAS-pytorch可在pytorch中实现高效的深度学习结构搜索。它使用参数共享来构建更高效的网络,使其适用于深度学习结构搜索。
全流程解决方案
1. ATM
https://github.com/HDI-Project/ATM
251星,56 Forks, 557 Commits
需手动安装
Auto-Tune Models是麻省理工学院HDI项目开发出的框架,可用于机器学习模型的快速训练,仅需很小的工作量。
它使用贝叶斯优化和Bandits库,利用穷举搜索和超参数优化来实现模型选择。要注意,ATM仅支持分类问题,也支持AWS上的分布式计算。
2. MLBox
https://github.com/AxeldeRomblay/MLBox
504星,115 Forks,854 Commits
最新版本0.5.0,2017.8.25更新
MLBox是一个新出的框架,其目标是为自动机器学习提供一个最新和最先进的方法。
除了许多现有框架实现的特征工程外,它还提供数据采集、数据清理和训练-测试漂移检测等功能。
此外,它使用Tree Parzen Estimators来优化所选模型的超参数。
3. auto_ml
https://github.com/ClimbsRocks/auto_ml
793星,146 Forks,1149 Commits
最新版本2.7.0,2017.9.11更新
Auto_ml是一种实用工具,旨在提高从数据中获取的信息量,且无需除数据清洗外的过多工作。
该框架使用进化网格搜索算法来完成特征处理和模型优化的繁重工作。它利用其它成熟函数库(如XGBoost、TensorFlow、Keras、LightGBM和sklearn)来提高计算速度,还宣称只需最多1毫秒来实现预测,这也是这个库的亮点。
该框架可快速洞察数据集(如特征重要性)来创建初始预测模型。
4. auto-sklearn
https://github.com/automl/auto-sklearn
2271星, 438 Forks,1839 Commits
最新版本0.3.0,2018.1.5更新
Auto-sklearn使用贝叶斯搜索来优化机器学习流程中使用的数据预处理器、特征预处理器和分类器,并把多个步骤经过训练后整合成一个完整模型。
这个框架由弗莱堡大学的ML4AAD实验室编写,且其中的优化过程使用同一实验室编写的SMAC3框架完成。
顾名思义,这个模型实现了sklearn中机器学习算法的自动构建。Auto-sklearn的主要特点是一致性和稳定性。
5. H2O
https://github.com/h2oai/h2o-3
3132星, 1217 Forks,22936 Commits
最新版本3.20.0.1,2018.6.7更新
H2O是一个用Java编写的机器学习平台,它和sklearn等机器学习库的使用体验相似。但是,它还包含一个自动机器学习模块,这个模块利用其内置算法来创建机器学习模型。
该框架对内置于H2O系统的预处理器实施穷举搜索,并使用笛卡尔网格搜索或随机网格搜索来优化超参数。
H2O的优势在于它能够形成大型计算机集群,这使得它在规模上有所增长。它还可在python、javascript、tableau、R和Flow(web UI)等环境中使用。
6. TPOT
https://github.com/EpistasisLab/tpot
4130星,705 Forks,1766 Commits
最新版本0.9,2017.9.27更新
TPOT为基于树的流程优化工具,是一种用于查找和生成最佳数据科学流程代码的遗传编程框架。TPOT和其他自动机器学习框架一样,从sklearn库中获取算法。
TPOT的优势在于其独特的优化方法,可以提供更有效的优化流程。
它还包括一个能把训练好的流程直接转换为代码的工具,这对希望能进一步调整生成模型的数据科学家来说是一个主要亮点。
原文发布时间为:2018-08-22
本文作者:Alexander Allen、Adithya Balaji