网站首页 > 技术文章 正文
1、前言
现在人工智能发展很火热,各种开源框架越发完善,用户的学习门槛越来越低,用Python简单的几十行代码就能实现一个人工智能应用,这些便利性都是建立在各路大神不断提出新的算法并开源出封装包的基础上的。所以,现在很多机器学习工程师都自嘲为“调包侠”。
但是,要做一名合格的“调包侠”也是需要深刻理解各类机器学习算法的原理以及所适用的使用场景。而且,在机器学习的训练过程中,调参似乎也是一个必不可少的过程,所以“调包侠”中的“调参师”由此而来。调参是一个繁琐耗时且枯燥的过程,所以自动调参应运而生。
本文将描述一个简易版自动调参器的设计与实现,实际上是对sklearn, mlxtend和xgboost等开源算法包的封装整合。
2、架构设计与实现
2.1 整体功能框架
整体功能框架如上图所示,可以分为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。流程如下图所示:
其中stacking集成学习建模方式如下图所示,其基本的原理是将训练好的多个基分类器用于对训练数据作预测,预测的结果并联合并作为二级分类器的输入训练数据,同时把对应的实际标签并联合并作为二级分类器的输入训练标签,对二级分类器进行训练调参后得到最终的模型。
3、总结
本文通过封装整合sklearn, mlxtend和xgboost等开源算法,实现了一个简易版的自动调参器,可以对一些机器学习相关的任务进行自动调参。项目的源码地址为:
https://github.com/Oreobird/AutoML.git
其中提供了使用AutoML对Kaggle中的入门任务 Titanic 进行自动调参的实例,有兴趣的同学可以参考阅读。
猜你喜欢
- 2024-10-08 一文了解RF,GBDT,XGBoost,lightGBM之间的异同
- 2024-10-08 Mars Remote API轻松分布式执行Python函数
- 2024-10-08 如何画XGBoost里面的决策树?(决策树 graphviz)
- 2024-10-08 AI算法机器学习常见面试题(四)(ai算法测试工程师面试)
- 2024-10-08 Python机器学习库Sklearn系列教程(21)-参数优化
- 2024-10-08 LightGBM的参数详解以及如何调优(lightgbm模型是什么)
- 2024-10-08 XGBoost在携程搜索排序中的应用(携程排名规则)
- 2024-10-08 94《风控炼丹炉模型调参-课程简介》(视频版)
- 2024-10-08 XGBoost介绍(xgboost中文名是什么)
- 2024-10-08 如何选择最佳模型:GBDT、LightGBM、XGBoost、AdaBoost 轻松上手
- 1510℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 545℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 498℃MySQL service启动脚本浅析(r12笔记第59天)
- 478℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 476℃启用MySQL查询缓存(mysql8.0查询缓存)
- 455℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 436℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 433℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)