XGBoost中正则化的9个超参数

news2024/9/25 19:25:35

正则化是一种强大的技术,通过防止过拟合来提高模型性能。本文将探索各种XGBoost中的正则化方法及其优势。

为什么正则化在XGBoost中很重要?

XGBoost是一种以其在各种机器学习任务中的效率和性能而闻名的强大算法。像任何其他复杂模型一样,它可能会过拟合,特别是在处理噪声数据或过多特征时。XGBoost中的正则化有助于通过以下方式缓解这一问题:

  1. 降低模型复杂度: 通过惩罚较大的系数,正则化简化了模型。
  2. 改善泛化能力: 确保模型在新数据上表现良好。
  3. 防止过拟合: 防止模型过度适应训练数据。

下面我们介绍在XGBoost中实现正则化的方法

1. 减少估计器的数量

减少估计器的数量可以防止模型变得过于复杂。两个关键超超参数包括:

n_estimators: 设置较低的树的数量可以帮助防止模型学习训练数据中的噪声。n_estimators的高值会导致过拟合,而低值可能导致欠拟合。

early_stopping_rounds: 这种技术在验证集上的性能停止改善时停止训练过程,防止过拟合。

上图为没有早停的模型指标

上面的模型中,即使损失不再下降,训练也会继续。相比之下,使用

early_stopping_rounds=10

,当连续10轮损失没有改善时,训练就会停止。

 # 初始化带有早停的XGBoost回归器
 model=xgb.XGBRegressor(n_estimators=1000, learning_rate=0.1, max_depth=5)
 
 # 使用早停训练模型
 model.fit(X_train, y_train, 
           eval_set=[(X_test, y_test)], 
           early_stopping_rounds=10, 
           verbose=True)

使用early_stopping_rounds=10的模型指标

2. 使用更简单的树

简化每棵树的结构也可以帮助正则化模型。关键参数包括:

gamma: 在叶节点上进行进一步分区所需的最小损失减少。较高的值会导致更保守的模型。

下面是XGBoost的目标函数。如果增加gamma,叶节点的数量(T)就会减少。gamma惩罚T并帮助防止树变得过于复杂。

Gamma是一个后剪枝参数。以下复杂公式表示在每次分裂时计算的增益。第一、第二和第三项分别是左子节点、右子节点和父节点的相似度分数。Gamma(最后一项)是增益的阈值。

在下面的例子中,每个节点内的值代表不包含gamma项的增益。当gamma设置为400时,最底部的分支被删除,因为它不满足阈值标准,这样树就变得更简单了。

那么问题来了:gamma的最佳值是多少?答案在于超参数调优。

 # 获取树的详细转储,包括统计信息
 tree_dump=model.get_booster().get_dump(dump_format='text', with_stats=True)
 
 # 打印树的转储以查看详细信息,包括每个节点的增益
 fortreeintree_dump:
     print(tree)

上面的代码将显示所有决策树的转储。通过观察所有节点的增益,我们可以尝试不同的gamma值。

 importxgboostasxgb
 # Gamma的实现
 model=xgb.XGBRegressor(n_estimators=3, random_state=42, gamma=25000)

但是有一点,gamma值过高会导致欠拟合,因为它减少了树的深度,而gamma值过低会导致过拟合。

max_depth: 限制树的最大深度。较低的值可以防止模型学习过于具体的模式。这是一个预剪枝参数。

思考题1:当我们有gamma时,为什么还需要max_depth?(答案在最后)

min_child_weight: 要解释这个参数就要先了解什么是cover。

当我们进行树转储时,我们会看到所有节点的cover值。Cover是hessians的总和,而hessian是损失函数相对于预测值的二阶导数。

我们以一个简单的损失为例,对于均方损失函数的回归问题,hessian的值为1。所以在这种情况下,cover基本上是每个节点中的数据点数量。因此min_child_weight是每个节点中应该存在的最小数据点数量。它对每个节点设置以下条件:

cover > min_child_weight

xgboost中回归问题的min_child_weight类似于决策树中的min_sample_split。

 importxgboostasxgb
 
 # min_child_weight的例子
 model=xgb.XGBRegressor(n_estimators=100, learning_rate=0.1, max_depth=5, min_child_weight=10, gamma=1, random_state=42)

对于分类问题,理解这一点有点棘手,但是简单来说分类中min_child_weight的一句话描述是:它为数据点的重要性设置了一个阈值。

所以我们只要记住min_child_weight是一个预剪枝参数。增加min_child_weight会减少过拟合。

3. 采样

采样涉及在数据的子集上训练模型,这可以通过引入随机性来减少过拟合。

subsample: 用于训练每棵树的训练数据的百分比。较低的值可以防止过拟合。子采样使每个决策树成为数据子集的专家,遵循"群众的智慧"原则。根据数据的不同,0.5到0.8的范围通常会给出良好的结果。

colsample: 用于训练每棵树的特征的百分比。这也可以用来引入随机性并防止过拟合。

colsample

有以下三种类型,它们的值范围从0到1。这些按引入随机性的增加顺序排列如下。假设我们的数据中有10个特征,所有这些超参数的值都设置为0.5:

  • colsample_bytree : 为每棵树随机选择5个特征,并根据这些特征进行分裂。
  • colsample_bylevel : 为每个级随机选择5个特征,并根据这些特征进行分裂。
  • colsample_bynode : 为每个节点随机选择5个特征,并根据这些特征进行分裂。
 importxgboostasxgb
 
 # subsample和colsample的例子
 model=xgb.XGBRegressor(n_estimators=100, subsample=0.8,
                        max_depth=5, colsample_bytree=0.5,
                        colsample_bylevel=0.5, colsample_bynode=0.5)

4. 收缩

收缩减少了每棵单独树的影响,使模型更加稳健:

learning_rate (收缩): 减少每棵树的影响。较低的值意味着模型构建更多的树,但不太可能过拟合。0.3是许多模型的合适学习率。

lambda和alpha: L2(岭)和L1(Lasso)正则化项,惩罚大系数。

当增益小于gamma时,该节点就会被剪枝。当lambda增加时,过拟合减少,欠拟合增加。Lambda与gamma一起用于正则化。

思考题2:当我们有gamma时,为什么还需要lambda?

 importxgboostasxgb
 # reg_lambda是lambda的超参数,reg_alpha是alpha的超参数
 model=xgb.XGBRegressor(n_estimators=3, learning_rate=0.3, reg_lambda=100, reg_alpha=100, gamma=10000)

思考题答案

1、XGBoost中即使有了gamma参数,我们仍然需要max_depth参数。

在XGBoost中,gamma和max_depth虽然都用于控制树的生长,但它们的工作方式和目的略有不同:

  1. gamma(最小分裂损失):- gamma是一个后剪枝参数。- 它控制节点分裂时所需的最小损失减少量。- 如果分裂导致的损失减少小于gamma,那么这个分裂就不会发生。- gamma更关注的是分裂的质量。
  2. max_depth(最大树深):- max_depth是一个预剪枝参数。- 它直接限制了树可以生长的最大深度。- 无论分裂的质量如何,一旦达到max_depth,树就会停止生长。- max_depth更关注的是树的整体结构。

为什么两者都需要:

  1. 不同的控制粒度:- gamma提供了一种基于性能的细粒度控制。- max_depth提供了一种简单直接的粗粒度控制。
  2. 计算效率:- 只使用gamma可能导致在某些情况下树过度生长,增加计算复杂度。- max_depth可以有效地限制计算资源的使用。
  3. 模型可解释性:- 过深的树可能难以解释,即使每次分裂都是有意义的。- max_depth可以保持树的结构相对简单。
  4. 处理不同类型的数据:- 对于某些数据集,基于gamma的剪枝可能不够,树仍然可能过度生长。- max_depth提供了一个绝对的上限。
  5. 互补作用:- 两个参数一起使用可以更灵活地控制模型的复杂度。- 它们共同作用,可以在模型性能和复杂度之间取得更好的平衡。

总之,gamma和max_depth在控制树的生长方面起着互补的作用。gamma关注分裂的质量,而max_depth确保树不会变得过于复杂。同时使用这两个参数,可以更好地平衡模型的性能、复杂度和可解释性。

2、为什么在XGBoost中即使有了gamma参数,我们仍然需要lambda参数。

在XGBoost中,gamma和lambda虽然都用于正则化,但它们的工作方式和目的是不同的:

  1. gamma(最小分裂损失):- gamma主要用于控制树的生长。- 它设置了节点分裂所需的最小损失减少量。- 如果分裂导致的损失减少小于gamma,那么这个分裂就不会发生。- gamma更关注的是树的结构和复杂度。
  2. lambda(L2正则化项):- lambda是应用于叶子权重的L2正则化项。- 它直接惩罚模型的权重。- lambda帮助防止模型对个别特征过度依赖。- 它可以使模型更加稳定和泛化能力更强。

为什么两者都需要:

  1. 不同的正则化目标:- gamma主要影响树的结构。- lambda主要影响叶子节点的权重。
  2. 模型复杂度的不同方面:- gamma通过限制树的生长来减少复杂度。- lambda通过缩小权重来减少复杂度。
  3. 处理不同类型的过拟合:- gamma可以防止模型学习训练数据中的噪声。- lambda可以防止模型对某些特征过度敏感。
  4. 互补作用:- 同时使用这两个参数可以更全面地控制模型的复杂度。- 它们一起工作可以在模型的结构和权重上都实现正则化。
  5. 灵活性:- 在某些情况下,你可能想要一个深度较大但权重较小的树,或者相反。- 有了这两个参数,你可以更灵活地调整模型以适应不同的数据集和问题。
  6. 收缩效果:- 如之前提到的,lambda还有一个额外的作用,就是对树的输出进行收缩。- 这种收缩效果可以进一步帮助防止过拟合,特别是在梯度提升的早期阶段。

gamma和lambda在XGBoost中起着互补的作用。gamma主要控制树的结构,而lambda主要控制叶子节点的权重和树的输出。同时使用这两个参数,可以更全面、更灵活地控制模型的复杂度,从而在不同层面上防止过拟合,提高模型的泛化能力。这种多层面的正则化策略是XGBoost强大性能的关键因素之一。

https://avoid.overfit.cn/post/07cefc6e54b84286a26120016327d478

作者:Daksh Rathi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

x-cmd mod | x scoop - Windows 开源包管理工具

目录 介绍主要特点例子子命令 介绍 scoop 是 windows 的第三方包管理工具,与 winget, choco, chocolatey 类似。 本模块在 scoop 的基础上做了增强,使其可与 shell 无缝集成,并提供更多的功能。 主要特点 自动下载: 通过调用 S…

汇编语言:cmp、je、jne、jb、jnb、ja、jna 指令

一. cmp 指令 1. cmp 指令功能 cmp (compare) 是比较指令,cmp 的功能相当于减法指令,只是不保存结果,但会根据结果对标志寄存器进行设置,其它相关指令就可以通过识别这些被影响的标志寄存器的位来得知比较结果。 2. cmp指…

python爬虫:selenium+browsermobproxy实现浏览器请求抓取(模块安装详解)

前言 本来很多场景用beautiful和requests就能解决的&#xff0c;但是最近发现了某些网站会使用<link>来链接网页信息&#xff0c;让我没办法通过requests获取页面的具体内容&#xff1b;并且接口也加入了某种token的生成方案&#xff0c;导致我无从下手。 因此&#xff0…

Scrapy 分布式爬虫框架 Scrapy-Redis

github官网代码示例&#xff1a;https://github.com/rmax/scrapy-redis/blob/master/example-project/example/spiders/myspider_redis.py 什么是 Scrapy-Redis Scrapy-Redis 是一个基于 Scrapy 的扩展&#xff0c;用于实现分布式爬虫。它利用 Redis 作为分布式队列来共享待爬…

.NET_web前端框架_layui_栅格布局

基础概念 layui:用于简化前端编写的框架。响应式布局&#xff08;Responsive Layout&#xff09;:一种网页设计方法&#xff0c;使网页能够根据不同设备的屏幕尺寸和分辨率自动调整其内容和布局。栅格布局&#xff08;Grid Layout&#xff09;:一种网页设计布局方法&#xff0c…

计算机毕业设计选题推荐-OA办公管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

【IEEE出版,连续7年稳定发表】第八届电气、机械与计算机工程国际学术会议(ICEMCE 2024,10月25-27)

由西京学院主办&#xff0c;AEIC学术交流中心协办&#xff0c;中国科学技术大学、深圳大学、浙江工业大学等校联合支持的第八届电气、机械与计算机工程国际学术会议&#xff08;ICEMCE 2024&#xff09;将于2024年10月25日至27日在西安举办。 本次会议主要围绕“电气”、"…

电脑文件自动加解密如何实现?3个方法教会你!

电脑文件的自动加解密是一项非常实用的功能&#xff0c;可以帮助确保数据的安全性。 以下是三种实现电脑文件自动加解密的方法&#xff1a; 方法一&#xff1a;使用操作系统自带的加密功能 Windows BitLocker&#xff1a; 启用BitLocker&#xff1a;在Windows系统中&#xf…

SpringBoot 项目——抽奖系统

本项目主要实现的功能是&#xff1a;主要服务于管理员用户&#xff0c;其可圈选奖品&#xff0c;人员来创建抽奖活动&#xff0c;并进行在线抽奖&#xff0c;并可通过短信或邮件的方式通知中奖者&#xff0c;同时普通用户可查看已结束的抽奖活动的中奖结果&#xff1b; 一、项…

ViT篇外:NVIDIA Llama-3.1-Minitron 4B

相关阅读&#xff1a; ViT&#xff1a;3 Compact Architecture MobileLLM&#xff1a;“苗条”的模型比较好&#xff01; 大家也许会很好奇为什么在ViT章节插入了NVIDIA Llama-3.1-Minitron 4B&#xff0c;ViT因为应用场景的特殊性所以都寄希望于高效率的模型&#xff0c;因…

【C语言】浮点型数据在内存中的储存

浮点型数据在内存中的储存 文章目录 浮点型数据在内存中的储存引例概念提出浮点型数据储存规定对于有效数字M的特别规定对于指数E的特别规定指数E的储存指数E的读取 利用规则解释原因 在之前学习过整形数据在内存中的储存后&#xff0c;浮点型数据在内存中的储存又会怎样呢&…

AI辅助论文写作已成大趋势,这些AI工具分享给你

近年来&#xff0c;人工智能语言模型迅速发展&#xff0c;特别是在美国人工智能研究实验室 OpenAI 于 2022 年 11 月发布了聊天机器人 ChatGPT 后&#xff0c;引发了全球范围内的广泛讨论。人们惊叹着一个新的人工智能时代已经到来&#xff0c;预示着许多工作将被这类机器人所取…

二叉树刷题(1)

二叉树题目讲解&#xff08;1&#xff09; 一、构建二叉树并且遍历&#xff08;1&#xff09;思路&#xff08;2&#xff09;代码 二、对称二叉树1、思路2、代码 三、相同的树1、思路2、代码 四、单值二叉树1、思路2、代码 五、另一棵树的子树1、思路2、代码 一、构建二叉树并且…

【Rust日报】一本新书:黑帽Rust

2024 Rust中国大会大会将于 9 月 07 日 - 08 日在上海举办。精彩议题逐步放出中&#xff0c;欢迎大家面对面交流。 2024 Rust中国大会报名链接暨第一批精彩演讲主题介绍 2024 Rust中国大会第二批精彩演讲主题列表 2024 Rust中国大会第三批精彩演讲主题列表 马尔科夫文本生成算法…

多线程(5)——锁策略、CAS、JUC常见类

1. 常见锁策略 1.1 乐观锁 & 悲观锁 乐观锁 & 悲观锁 也不是指具体某个锁&#xff0c;而是 “锁的一种特点”&#xff0c;描述了 “一类锁” 乐观锁&#xff1a;加锁的时候&#xff0c;假设出现锁冲突的概率不大 > 接下来围绕加锁要做的工作就会更少悲观锁&#…

minio 后端大文件分片上传,合并,删除分片

背景 网上大多数minio大文件上传都是采用后台返回前端预上传链接&#xff0c;然后由前端去put请求直接和minio通信上传分片文件&#xff0c;然后调用后台合并分片逻辑来达到快申诉上传的目的&#xff0c;详情可以参考我的上两篇文章 最近有个项目域名是https的&#xff0c;但…

# 低代码和无代码开发初探

低代码和无代码开发初探 低代码和无代码都是近年来在软件开发领域兴起的技术趋势&#xff0c;它们旨在提高开发效率、降低开发门槛&#xff0c;让更多人能够参与到软件开发过程中。以下是对低代码和无代码的介绍&#xff1a; 一、低代码 1、低代码定义 低代码开发平台&…

Linux nice/renice 命令 - 进程的NI、PRI属性

进程NI、PRI属性的联系 共同影响进程调度&#xff1a;NI和PRI都是Linux进程调度机制中的重要参数&#xff0c;它们共同决定了进程在CPU资源竞争中的优先级。NI值通过影响PRI值来间接影响进程的调度顺序。NI值可调整以改变PRI值&#xff1a;用户可以通过调整进程的NI值来间接改…

较难!第15届蓝桥杯青少组省赛Scratch中级组编程真题

今天上午第15届蓝桥杯青少组省赛Scratch初级组考完试以后&#xff0c;Scratch实验室就预估今天下午的Scratch中级组比较难&#xff0c;结果不出所料&#xff0c;还是比较有难度&#xff0c;据好几个学生及家长说&#xff0c;好几道题不会做时间不够。 来源&#xff1a;结束啦&a…

三级_网络技术_43_综合题(报文)

一、 某客户机使用DHCP获取IP地址等信息&#xff0c;其获取lP地址过程中捕获的4条报文及对第2条报文分析如下所示。请分析其中的信息&#xff0c;补全内容。 编号 报文摘要 DHCP:Request, Type:DHCP discover DHCP:Reply, Type:DHCP__________ DHCP:Request, Type:DHCP Re…