当前位置: 首页 > news >正文

机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法

一、集成学习框架

训练样本较少的结构化数据领域,Boosting算法仍然是常用项

XGBoost、CatBoost和LightGBM都是以决策树为基础的集成学习框架

三个学习框架的发展是XGBoost是在GBDT的基础上优化而来,CatBoost和LightGBM是在XGBoost的基础上优化而来

三个学习框架的决策树构造方式XGBoost是按照层生成(level-wise)得到的是对称树,避免过拟合但存在冗余分裂;CatBoost也是对称树,其为完全二叉树;LightGBM使用的是叶子生长(level-wise),其得到是一个不对称树

三个学习框架对类别特征的处理XGBoost不能自动处理类别特征,对于其中的类别特征,需要人工手动出来成数值形式用于模型训练;LightGBM只需要指定类别特征名称,其内置的算法会自动对其进行处理;CatBoost是专门处理类别特征,其中内置的目标变量统计的特征编码方式实现对数据类别特征的高效处理

知识补充:对称树关注的是结构对称性,而完全二叉树强调层序填充的完整性。两者在定义、构造条件和应用场景上截然不同,但也存在交集(如完全对称的满二叉树)

对称树:二叉树的左右子树呈镜像对称,不能出现左或右子树缺失,或者对应对称节点值不等的情况

完全二叉树:深度为k的二叉树,若其前k-1层节点数达到最大值,且第k层节点从左到右。

连续排列,则称为完全二叉树

在对某一数据集进行多模型训练和测试分类效果比较时:需要展现的表格效果为:

模型1

模型2

.................

模型n

基本超参数

训练集AUC

测试集AUC

训练时间(s)

测试时间(s)

知识补充:AUC是模型在数据上的分类排序能力量化指标,其核心价值在于评估模型拟合能力及辅助判断过拟合

二、调参优化

机器学习中有大量的参数需要人为事先设定,这些统称为超参数(hyperparameter),常见的就如同epoch、batch_size、树深度、学习率和正则化系数等参数的设定
下面来介绍机器学习中常用的调参方法:需要强调的是超参数的最优选择是在模型的验证过程中,即此时需要用到验证集,需要提取对数据集划分好(因为超参数是不参与模型内部参数的自动更新,其是通过外部调优确定最佳取值)

①随机调参法( random search,不是所有超参数组合都尝试)

其采用的方式是对给定分布中抽样规定数量的参数,对这些抽样的超参数进行实验,选取其中模型验证集损失误差最小时的超参数组合即可。有时这种方式更为高效

②网格搜索法(grid search,所有超参数组合都尝试)

这种方法的思路很好理解,其主要适用的场景包括:优化三个及其以下的超参数数量。具体方法:比如我现在有三个参数a/b/c,我想得到三个参数组合的最优模型参数,那么我预先设定三个参数的候选值列表(预设一个待搜索的参数列表空间):a:[0.1,0.3.0.5],b:[50,100,150],c:[3,5,7],那么此时总共的组合方式为3×3×3=27种(笛卡尔乘积组合),此时就依次遍历这27种组合用于模型的参数设置,选择其中模型验证集损失误差最小时的超参数组合即可

③贝叶斯调参优化法(bayesian optimization,这种方式可以同时出来很多参数,当然其计算资源的增加也是指数级别的增加)

贝叶斯优化调参是目前最好的调参方法,贝叶斯优化的核心价值在于以最少试错成本逼近全局最优解。其中的优化方法涉及高斯过程和贝叶斯定理。其高斯过程的核心是对已有的数据点预测区域进行函数建模,求其不确定性和概率分布,对其中概率较大的区间的进行迭代,使得模型的损失达到最低时对应的超参数组合选择,但是这种方式比较消耗计算资源

其核心思想很好理解:比如在使用贝叶斯优化方法时,我希望在目前选择的一个参数1条件下(前提),使得其去组合另外一个参数2,使得模型效果更好,那么我怎么更好的去寻找到满足前提条件中最好的值(即这个前提条件是最优的),此时寻找的方法就可以使用高斯过程,找到这个最好的前提条件值,此时就只需要对另外一个参数2做考虑即可,迭代参数2的范围,找到模型性能最好的那组对应的超参数组合。幸运的是,目前这个好理解但实现复杂的方法已经被封装在bayes_opt中,可以在pycharm中直接调用使用

http://www.dtcms.com/a/99804.html

相关文章:

  • 计算机基础
  • 睡眠健康领域的智能硬件设备未来的发展趋势
  • C语言术语
  • 算法刷题记录——LeetCode篇(1.3) [第21~30题](持续更新)
  • 分库分表详解
  • 关于c++的FLOYD算法 P2910 [USACO08OPEN] Clear And Present Danger S 题解
  • Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解
  • 高级SQL技巧
  • Linux(8.6)rsync
  • 33. Java 流程控制语句 If-Then-Else 语句
  • [原创](现代C++ Builder 12指南): 如何使用System.JSON?
  • Gitee批量删除仓库
  • 美食菜谱数据集 | 智能体知识库 | AI大模型
  • 力扣HOT100之普通数组:41. 缺失的第一个正数
  • Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64
  • Vue实现的表格多选方案支持跨页选择和回显功能
  • DNS网络攻击:原理剖析、危害解读与全面防御指南
  • 【Python LeetCode 专题】每日一题
  • 【20期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股实时最新分时MACD数据及接口API说明文档
  • 本地缓存之Guava Cache
  • Linux CentOS 7 搭建我的世界服务器详细教程 (丐版 使用虚拟机搭建)
  • CTFshow命令执行(55-71)
  • 24_原型和原型链_this
  • GitHub上免费学习工具的精选汇总
  • 数字电路基础
  • 【Java/数据结构】优先级队列(PriorityQueue)(图文版)
  • PDF处理控件Aspose.PDF教程:通过C#、Java 和 Python删除 PDF中的水印
  • 测试cursor-AI编辑器
  • Python FastApi(8):模式的额外信息、额外数据类型
  • java网盘项目,文件和文件夹用两个表还是一个表,两个表理论查询效率慢了为啥要用,有啥优势