AutoGluon背后的技术

AutoGluon背后的技术

AutoGluon是一个Automl框架
Automl:自动对数据抽取特征并进行模型训练
其目的是尽量在不需要人的帮助下对输入进行特征的提取,选取适合的机器学习模型,对它进行训练
目前市面上有多款Automl的框架,大部分Automl框架是基于超参数搜索技术,就是在数十或数百个超参数的候选中选取一个比较好的模型,希望通过这样避免人工调参
Autogluon设计思路:想避免超参数的搜索,从而可以在相同的时间可以训练多个不一样的模型
依赖于融合多个无需超参数搜索的模型
训练数10个臭皮匠希望合在一起打败诸葛亮
使用的技术
- stacking:在同一个数据集上训练多个不一样的模型,例如KNN,树模型和方法或者是复杂的神经网络,这些模型的输出然后进入到一个线性的模型,得到最终的输出,也就是对这些输出做加权和,权重是通过训练得到的,这就是调用fit模型时autogluon默认使用的方法,大家可以通过训练打印的信息或者leadboard的方法查看使用了哪些模型

2.技术2:K-则交叉bagging
bagging是指训练多个同类别的模型,他们可能使用多个初始不同的权重和数据块,最后将这些模型的输出做平均来降低预测的方差
K-则交叉bagging源自K-则交叉验证
这里使用3-则来举例:首先将数据分为3块,
第1则,使用前两块数据来进行训练,最后一块用来评估模型的好坏
第2则:使用第2和第3块数据来进行模型的训练,第2则做验证
第3则:使用有两块数据做训练,第一块做验证
最后预测的时候,将3则模型的输出进行平均得到最终的输出
如果调用fit的时候,指定num_bag_folds=3,那么就是对stacking中的每个模型,对它做3则交叉bagging

技术3:多层stacking
约定是将多个模型的输出和数据合并起来再做一次stacking,也就是在上面再训练多个模型,然后用一个线性模型得到一个输出
防止过拟合,多层stacking往往是要配合k-则交叉bagging使用的,也就是这里的每个模型是k个模型的bagging,stacking的输出是指每个bagging模型的输出它对应的验证集上的输出的合并
在autogluon里可以通过num_stake_levels=1和num_bag_folds=3来选择额外使用一次stacking,而且每个模型使用3层交叉bagging,因为这两个选项都会额外增加计算开销,所以需要用户在计算资源充分而且需要高精度模型的时候手动置零

比较autogluon和其他automl框架的性能
使用种类多样的50个数据集,1个框架限制4小时运行时间,autoglon赢下了其中30个数据集
这说明在给定资源下,通过训练尽可能多的不一样的模型,有效的将它们融合在一起,是一个非常有效的策略

可以阅读autogluon论文、文档和代码了解更多细节
论文:https://arxiv.org/abs/2003.06505
文档:https://auto.gluon.ai/
代码:https://github.com/awslabs/autogluon
