xgboost基本思想、节点分裂与公式详解

本文深入解析了XGBoost算法的基本思路,详细介绍了属性节点如何分裂以形成更准确的预测模型,以及目标函数的优化过程。通过实例展示了如何计算目标函数得分值,帮助读者理解XGBoost的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单理解xgboost基本思路
xgboost融合了集成的思想,是n棵树模型的融合。比如下图,首先生成tree1模型,再生成tree2模型,然后再把这两个简单的模型最终得分累加起来,作为对应的数据的预测得分。
如下图的判断一个人是否爱玩游戏,男孩在tree1这边的树模型,从叶子结点可知得分是2,在tree2模型可知得分是0.9.则男孩的累积得分是2.9。(实际模型中还可根据情况进行加权累积)。老爷爷这个角色也同理,在tree1得分为-1,在tree2得分为0.9,累积得分0.1。
而tree1生成1和tree2则是通过不同的属性划分形成的树,如tree1是有age、is male 这两个属性进行的划分;tree2是根据 use computer daily这个属性进行的划分。

在这里插入图片描述
二、属性节点如何分裂,如何将一堆数据划分为左右子树?
目标函数如下(公式推理后续做解释)
该目标函数即是通过损失函数的求导,使导数为0,取得目标函数极值点后求得的目标函数。
在这里插入图片描述
5个数据对象:【男孩 女孩 妈妈 奶奶 爷爷】
先通过age这一属性进行划分。
case1:男孩,女孩划分在一边成为左子树,其余的划分在另一边为右子树。
case2:男孩,女孩,妈妈划分在一边成为左子树,其余的划分在另一边为右子树。
则此时根据划分前后目标函数的增益值进行决定划分如何进行划分(即划分的年龄age应该是小于多少划在一边),增益值越大,则划分越准确(有点类似决策树的信息增益和基尼系数增益)。
在这里插入图片描述
Gain=Obj(L+R)- Obj(L)- Obj(R)
其中G为损失函数的一阶导函数,H为损失函数的二阶导函数。公司中的y则是加入新叶子节点引入的复杂度代价。与Obj目标函数中的y有所不同(对于y此点没太明白)

三、公式详解
1、假设损失函数为均方误差L
在这里插入图片描述
由于是集成的算法,所以预测的分数必须是K棵树模型的累加。fk(xi)代表这一棵树模型。
在这里插入图片描述
在此我们目标是求得最优函数解,即最小化误差的期望值。如下:
在这里插入图片描述
2、树模型的加入
在这里插入图片描述
对于每一个树模型ft(x)
在这里插入图片描述
而叶子结点数越多,模型容易过拟合,所以指定了一个惩罚项Ω(ft)。T为叶子结点的数量,y为惩罚的力度,入为自设定参数。

在这里插入图片描述
将目标函数才分为前t-1棵树的状态加上新的树模型(ft)。constant为计算过程中产生的所有常数项。
在这里插入图片描述
用均方误差公式作为损失函数代入,此处的前t-1棵树模型的预测分数的平方由于是常数项,所以直接被融合到const中。化简得如下:
在这里插入图片描述
而我们的目标就是使得标中的残差最小化。

3、目标函数的优化
在此运用泰勒展开式,ft(xi)视为△x,则gi为损失函数的一阶导,hi为损失函数的二阶导。Ω(ft)为前面提到的正则项,防止叶子结点过多导致过拟合问题。由于在加入第t棵树的时候,前t-1棵树模型不变化,故在此前t-1棵树模型的计算结果为一个常数项目,所以将在这里插入图片描述直接去掉。

在这里插入图片描述
4、统一将样本上的遍历方法转换为叶子结点的遍历,如一个样本有5个数据对象:【男孩 女孩 妈妈 奶奶 爷爷】,左子树两个对象存放在一个叶子结点,右子树三个对象存放在一个叶子结点,那么部分遍历n(即5)个样本的就转化为遍历T(即2)个叶子结点。
w和q(xi)分别为对应的权重和预测值。
在这里插入图片描述
n代表着样本的数量,T代表着当前的第 t 棵树模型的叶子结点数量。
**tip:**下式代表着第 Ij 个叶子结点中所有的样本的一阶导之和

5、最终求解
进一步简化目标函数
在这里插入图片描述
对目标函数求偏导,使导数为0,求得Wj的值代回目标函数得到目标函数最终优化表达式。而Gj、Hj则得靠指明损失函数后求得对应的一阶导和二阶导。(可以直接算得)
在这里插入图片描述
最终目标函数如下,改分数越小,代表着整个数的结构越好,划分效果越好。
在这里插入图片描述
来一个例子看看如何计算目标函数得分值
在这里插入图片描述
接着便是节点分裂的问题了,选择目标分数值增益值大的作为划分点,进行优化。

资源来源:https://www.bilibili.com/video/BV1Ks411V7Jg?p=4

<think>嗯,用户让我介绍一下XGBoost以及它和GBDT的区别,还要详细讲算法步骤。首先,我需要回忆一下XGBoost基本概念。XGBoost应该是一种梯度提升算法,属于集成学习中的Boosting方法。对吧?那GBDT也是梯度提升决策树,所以它们都属于Gradient Boosting的框架,但XGBoost可能有一些改进。 首先,我应该先解释XGBoost是什么,它的全称是eXtreme Gradient Boosting,对吧?由陈天奇等人开发,主要特点是高效、灵活,而且应用广泛,比如在Kaggle竞赛中表现很好。然后和GBDT的区别,可能需要比较它们在目标函数、正则化、树结构生成方式、缺失值处理等方面的不同。 接下来,算法步骤需要详细展开。XGBoost的目标函数包括损失函数和正则化项,正则化可能包括叶子节点的权重和树的复杂度。在每一步迭代中,会添加一个新的树来拟合前一轮的残差。然后,泰勒展开可能被用来近似目标函数,比如用到一阶导和二阶导。树的分裂准则可能和GBDT不同,XGBoost可能用增益计算来决定如何分裂节点,比如增益公式是怎样的? 然后,关于区别部分,GBDT通常用一阶导数,而XGBoost用了二阶导数,这样可能更精准。正则化方面,XGBoost加入了正则项来控制模型复杂度,防止过拟合,而GBDT可能没有显式的正则化。树的分裂算法上,XGBoost可能用了预排序(pre-sorted)或者直方图的方法,还有并行计算优化。另外,缺失值的处理,XGBoost可以自动学习如何处理缺失值,而GBDT可能需要预处理。 需要确认这些区别是否正确,比如是否GBDT真的没有正则化,或者是否有其他不同点。比如,XGBoost还支持不同的基学习器,不仅是决策树,但通常默认是树。而GBDT通常用CART树。另外,XGBoost在工程实现上做了优化,比如块结构、缓存优化等,这些可能也是区别点。 详细介绍算法步骤的时候,可能要分点说明:目标函数的构建、泰勒展开近似、树结构确定、分割节点选择、正则化项的具体形式,比如L1和L2正则。还有如何通过增益计算来决定是否分裂,以及如何剪枝。 用户可能需要了解XGBoost为什么比GBDT更好,所以在介绍区别时要强调性能、速度、准确度等方面的优势。另外,可能需要注意用户是否具备一定的机器学习基础,是否需要解释梯度提升的基本概念,但用户可能已经知道GBDT,所以重点放在两者的比较上。 有没有遗漏的关键点呢?比如,XGBoost还支持行采样和列采样,类似于随机森林,这也是防止过拟合的一种方法。而GBDT通常没有这样的采样机制。或者XGBoost的并行处理能力,虽然Boosting是串行的,但XGBoost在特征选择时可以并行,比如在寻找最佳分裂点的时候,利用多线程进行计算,这加快了训练速度。 算法步骤部分需要详细分解,比如每一步如何计算预测值,如何计算梯度,如何生成树结构,如何更新模型。可能还需要提到XGBoost如何处理缺失值,比如自动决定将缺失值分到左子树还是右子树。 哦,对了,XGBoost的目标函数具体形式应该是损失函数加上正则化项。比如,对于回归问题,损失函数可能是平方误差,正则化项是γ乘以叶子节点数加上λ乘以权重平方和的一半。这可能影响树的生成过程,因为分裂时的增益计算会考虑这些正则化项。 在具体步骤中,可能包括初始化预测值,然后迭代地添加树,每次迭代中计算梯度(一阶导)和Hessian(二阶导),根据这些统计量生成新的树结构,找到最佳的分裂点,然后更新模型。分裂节点的增益计算可能类似于 (G_L^2)/(H_L + λ) + (G_R^2)/(H_R + λ) - (G^2)/(H + λ) - γ,其中G和H是梯度和二阶导数的总和,γ是复杂度参数。如果增益大于0,则分裂,否则不分裂。 最后,需要确保比较部分清晰列出XGBoost和GBDT的不同之处,可能分点列出,比如正则化、导数阶数、工程优化、缺失值处理等。这样用户能一目了然。 总结一下,回答的结构应该是先介绍XGBoost,然后详细步骤分点说明,接着比较两者的区别,最后可能给出应用场景或优势。需要确保技术细节准确,同时语言通俗易懂,避免过于晦涩的数学公式,但必要的公式可能需要出现,比如增益的计算公式,以显示其严谨性。</think>### 一、XGBoost 简介 **XGBoost**(eXtreme Gradient Boosting)是一种基于梯度提升框架(Gradient Boosting)的高效机器学习算法,由陈天奇于2016年提出。它通过集成多个弱学习器(通常为决策树)逐步优化模型预测,广泛应用于分类、回归和排序任务,尤其在Kaggle竞赛中表现突出。 --- ### 二、XGBoost 算法步骤详解 #### 1. **目标函数设计** XGBoost的目标函数包含两部分: - **损失函数**(如均方误差、交叉熵)衡量预测值真实值的差异。 - **正则化项**(控制模型复杂度,防止过拟合): \[ \Omega(f_t) = \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T w_j^2 \] 其中 \(T\) 是叶子节点数,\(w_j\) 是叶子权重,\(\gamma\) 和 \(\lambda\) 是超参数。 #### 2. **泰勒展开近似** 在第 \(t\) 轮迭代中,对目标函数进行二阶泰勒展开,将优化目标转化为: \[ \text{Obj}^{(t)} \approx \sum_{i=1}^n \left[ g_i w_{q(x_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值