开发十年,就只剩下这套Java开发体系了 >>>
自从Google推出了能自动设计神经网络自我进化的AutoML论文后,我便开始持续关注这个领域
到目前为止,从网上显示的信息来看,深度学习这块大多没有实现的源码,还出于理论和论文阶段,而机器学习领域则产生了一些在一定程度上可以自动化的工具。
目前,在github上能实现一定程度auto ml的主要有如下几类:
1.tpot
https://github.com/rhiever/tpot
工作流程:
1.分析数据集的多项式特征(线性回归等);
2.分析数据集的主成份(PCA);
3.将多项式特征与主成份分析结果合并起来;
4.使用GP算法反复迭代,选取交叉熵最小的组合;
5.使用随机森林对结果分类;
输出结果:
最佳模型组合及其参数(python文件)和最佳得分
优劣:
tpot在数据治理阶段采用了PCA主成份分析,在模型选择过程中可以使用组合方法,分析的过程比起其他工具更科学,并能直接生成一个写好参数的python文件,但输出可参考的结果较少,不利于进一步分析。
2.auto_ml
https://github.com/ClimbsRocks/auto_ml
工作流程:
1.首先自动将所有字段归一化;
2.自动尝试选用tree-based models (DecisionTree, RandomForest, XGBoost/GradientBoosted trees, etc.), and regression models (LinearRegression, LogisticRegression, Ridge)等模型;
3.系统不会自动筛除相关性较高的字段,所以需要自行手工预处理;
4.自动将数据集划分为10等分,分别对每个子集计算特征值;
5.random forest会报告广泛适用的特征,而regression models则会返回这些特征的权重;
6.在树模型中,根据特征标准差的变化,得到特征的权重;
7.深度学习模型作为插件(可选),使用深度学习模型学习特征,然后再使用Gradient Boosting作为预测,通常能让精度提高5%
输出结果:
最佳模型名称,字段的权重及得分情况,模型具体错误及得分情况
优劣:
auto_ml并未使用PCA和组合方法,所以分析速度很快,得到的分析结果也很详细,但分析方法较为单一,导致过拟合的风险也会增大;auto_ml也是目前唯一引入了深度学习做分析的框架,值得一试。
3.machineJS
https://github.com/ClimbsRocks/machineJS
machineJS其实与auto_ml都是同一个作者,这个家伙有点飘忽不定,一会说要放弃auto_ml,但实际观察发现auto_ml的热度要高于machineJS,所以这里就不再废话了。
4.auto_sklearn
https://github.com/automl/auto-sklearn
工作流程:
使用穷举法在有限的时间内逐个尝试最优模型,上图是它的架构体系,看的出来他的工作逻辑是目前的开源框架中最复杂的一款,步骤就不细说了,大体过程应该是与Tpot相似的
输出结果:
计算过程以及最终模型的准确率
优劣:
穷举法简单粗暴,但也是最靠谱的,如果时间充裕的情况下可以加大预算周期不断让机器尝试最优解,但输出结果太少,基本上对进一步数据分析的帮助不大
不过据说auto-sklearn赢得了2017年的一次 AutoML Challenge,它的更新频率也很高,值得关注!
5.Parris
https://github.com/jgreenemi/Parris
严格来说Parris并不算是一款自动化机器学习的工具,而是当你确定好模型后的一款自动化调参工具
不过调参也是很费神的,能自动化也不错!那就记下来吧。
6.ATM
https://github.com/HDI-Project/ATM
又新发现一款 ,mark一下,回头再补充内容
大家还有什么好的自动化机器学习工具欢迎来拍砖!