1、前言
现在人工智能发展很火热,各种开源框架越发完善,用户的学习门槛越来越低,用Python简单的几十行代码就能实现一个人工智能应用,这些便利性都是建立在各路大神不断提出新的算法并开源出封装包的基础上的。所以,现在很多机器学习工程师都自嘲为“调包侠”。但是,要做一名合格的“调包侠”也是需要深刻理解各类机器学习算法的原理以及所适用的使用场景的,而且,在机器学习的训练过程中,调参似乎也是一个必不可少的过程,所以“调包侠”中的“调参师”由此而来。调参是一个繁琐耗时且枯燥的过程,而如何偷懒是推动人类发展的关键因素,所以自动调参应运而生。
本文将描述一个简易版自动调参器的设计与实现,实际上是对sklearn, mlxtend和xgboost等开源算法包的封装整合。
2、架构设计与实现
2.1 整体功能框架
![](https://img.haomeiwen.com/i4076491/696116681d867f53.png)
整体功能框架如上图所示,可以分为3个功能模块:
- 算法配置:负责解析配置文件,用户通过配置文件定义所要执行的任务类型是分类还是回归,需要使用哪些基本的算法模型和集成学习算法,以及使用哪些评估指标。
- 基模型交叉验证筛选与调优:实现基本模型的训练、交叉验证,选择出较优模型进行调优,输出各个基本模型文件。
- 集成学习:使用基本模型进行级联训练,交叉验证调优并输出最终模型文件。
2.2 配置文件定义
配置文件使用.ini的格式,主要内容如下,其中的[basic]及[meta_models]为必需的,后面的评估指标及基本算法模型可以根据[basic]指定的类型对应添加。
[basic] #定义任务类型:二分类、多分类、回归和聚类
model_type = binary #可选择的值 binary | multi | reg | cluster
[binary_clf_metrics] #定义二分类任务的评估指标
accuracy = true precision = true
[multi_clf_metrics] #定义多分类任务的评估指标
accuracy = true precision = true
[reg_metrics] #定义回归任务的评估指标
explained_variance = true
neg_mean_absolute_error = true
[cluster_metrics] #定义聚类任务的评估指标
adjusted_mutual_info_score = true
adjusted_rand_score = true
[clf_models] #定义分类模型
LR = true
SVM = true
DecisionTree = false
RandomForest = false
xgboost = true
[reg_models] #定义回归模型
RandomForest = true
[cluster_models] #定义聚类模型
KMeans = true
[meta_models] #定义集成学习算法模型
lgbm = true
2.3 自动调参流程
在定义好配置文件之后,根据其中的评价指标、算法模型候选集的选择,在训练时,遍历指标列表,针对每个候选算法模型进行交叉验证训练,选出较优的模型,利用网格搜索进行自动化参数调优,然后以调优得到的模型作为基模型进行stacking集成学习,二级模型使用GBDT。流程如下图所示:
![](https://img.haomeiwen.com/i4076491/01e02cfee6ebd8fe.png)
其中stacking集成学习建模方式如下图所示,其基本的原理是将训练好的多个基分类器用于对训练数据作预测,预测的结果并联合并作为二级分类器的输入训练数据,同时把对应的实际标签并联合并作为二级分类器的输入训练标签,对二级分类器进行训练调参后得到最终的模型。
![](https://img.haomeiwen.com/i4076491/3134b4bf06ee3962.png)
3、总结
本文通过封装整合sklearn, mlxtend和xgboost等开源算法,实现了一个简易版的自动调参器,可以对一些机器学习相关的任务进行自动调参。项目源码地址在AIPlayer 发布,其中提供了使用AutoML对Kaggle中的入门任务 Titanic 进行自动调参的实例,有兴趣的同学可以参考阅读。
网友评论