超详细解释XGBoost,一篇文章搞懂XGBoost

XGBoost是一种高效、可扩展的梯度提升树算法,由Tianqi Chen开发,广泛应用于数据科学竞赛。它在Kaggle竞赛中表现出色,被誉为必备技能。XGBoost通过优化目标函数,特别是引入偏差变量,提高了决策树的效率。算法通过贪心算法和加权分位法构建决策树,处理缺失值并控制模型复杂度,确保高效训练。

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

XGBoost

背景

XGBoost 最初是由 Tianqi Chen 作为分布式(深度)机器学习社区(DMLC)组的一部分的一个研究项目开始的。XGBoost后来成为了Kaggle竞赛传奇——在2015年的時候29个Kaggle冠军队伍中有17队在他们的解决方案中使用了XGboost。人们越来越意识到XGBoost的强大威力。夸张一点说,如果你不会XGboost,那你参加Kaggle竞赛就是去送人头的。

XGboost到底是什么呢?Tianqi Chen在XGboost的论文中写道:”Tree boosting is a highly effective and widely used machine learning method. In this paper, we describe a scalable end-to-end tree boosting system called XGBoost, which is used widely by data scientists to achieve state-of-the-art results on many machine learning challenges.“[1] 总结一下,XGBoost是一个可拓展的Tree boosting算法,被广泛用于数据科学领域。

XGBoost可以说是GBDT(Gradient Boosting Decision Tree)梯度提升树的一个改进版本。XGBoost中的X代表的就是eXtreme(极致),XGBoost能够更快的、更高效率的训练模型。这就是为什么XGBoost可以说似乎GBDT的一个改进版本。正是得益于XGBoost的高效率,使得她成为数据竞赛中的一大杀器。

工程原理

想要了解一个算法,首先得从宏观上知道这个算法是怎么工作的:1、算法的具体形式;2、怎么做出预测

具体形式

XGboost的可视化(如下图,一个由两棵决策树组成的XGBoost)

重点

1、XGboost的基本组成元素是:决策树;我们将这些决策树成为”弱学习器“,这些”弱学习器“共同组成了XGboost

2、组成XGBoost的决策树之间是有先后顺序的;后一棵决策树的生成会考虑前一棵决策树的预测结果,即将前一棵决策树的偏差考虑在内(在目标函数中有体现)

3、生成每棵决策树使用的数据集,是整个数据集。所以可以将每棵决策树的生成都看作是一个完整的决策树生成过程

怎么做出预测

一个新样本的预测:新样本依次进入XGBoost的每棵决策树。在第一棵决策树,有一个预测值;在第二棵决策树,有一个预测值,依次类推···直到进入完所有”弱学习器“(决策树)。最后,将“在每一颗决策树中的值”相加,即为最后预测结果。

举例:还是刚刚那张图,样本“儿子”在tree1中的预测值为+2,在tree2中为+0.9。将两个值相加,2+0.9=2.9,所以XGboost最后预测样本“儿子”的值为2.9

目标函数

引言

到这里,我们已经知道了一个XGBoost模型到底是什么工作的了。那XGboost模型到底是怎么生成的呢?XGboost中的“弱学习器”是怎么生成的?

了解机器学习的都知道,要评价我们产生的模型是否是最好的,其依据是“目标函数”。目标函数越小,这个模型才越是我们想要的。刚刚提到,XGboost中的“弱学习器”是“决策树”。在经典的“决策树”算法中,ID3的目标函数基于“信息熵”,CART的目标函数基于“GINI系数”。而在XGboost中,“决策树“的目标函数引入了”偏差“这个变量,这也是XGBoost的魅力所在。

总结一下:XGboost的”弱学习器“是”决策树“,每棵”决策树”都是目标函数值最小时的模型。只有这棵“决策树”的目标函数值最小,才会被选为“弱学习器”。

数学详解

要想清楚了解XGBoost的原理,需要对其目标函数进行数学上的解析。这样,我们才能知道,每一个”弱学习器“是怎么生成的。

我们已经知道,要生成一棵好的决策树,目标是:是其目标函数值最小。那问题是,我们该如何使得其最小呢?其中,涉及到两个问题:

问题1:怎么设置叶子节点的值?

问题2:如何进行结点的分裂(怎么构造树的结构)?

围绕问题1问题,笔者对目标函数进行了手写的数学详解


第t个决策树的目标函数公式如下


明确符号

1、 l ( y i , y ^ i ( t − 1 ) ) l({y}_{i},\widehat{y}_{i}^{(t-1)}) l(yiy i(t1)) 表示与 y i , y ^ i ( t − 1 ) {y}_{i},\widehat{y}_{i}^{(t-1)} yiy i(t1) 有关的损失函数,这个损失函数是可以根据需要自己定义的

2、 y ^ i ( t − 1 ) \widehat{y}_{i}^{(t-1)} y i(t1) 表示”前t-1棵决策树“对样本i的预测值(将前t-1棵决策树中的每棵决策树的预测值相加所得); y i {y}_{i} yi 表示样本i的实际值

3、 f t ( x i ) f_{t}(x_{i}) ft(xi) 表示”第t棵决策树“对样本i 的预测值

4、 Ω ( f t ) \Omega(f_{t}) Ω(ft) 表示第t棵树的模型复杂度

所以,我们有结论如下图:总共k棵树对样本i的预测值=前k-1棵预测树的预测值+第k棵树的预测值


化简目标函数

1、将刚刚得到的: y ^ i ( k ) = y ^ i ( k − 1 ) + f k ( x i ) \widehat{y}_{i}^{(k)}=\widehat{y}_{i}^{(k-1)}+{f}_{k}(x_{i}) y i(k)=y i(k1)+fk(xi) 替换进目标函数。过程如下图

2、紧接着第一步的结果,我们有以下目标——怎么样才能使目标函数最小(如下图)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8rsrcaA-1662714938255)(https://typora-nigel.oss-cn-nanjing.aliyuncs.com/img/未命名图片.png)]

3、为了解决这个问题,我们对目标函数进行化简。根据数学知识,我们可以使用“泰勒展开”对一个函数进行化简。具体过程如下图

大致的思路:1、使用泰勒展开;2、将常数项忽略(因为我们的目标是找最小值);3、转换一些符号,使式子更简洁


注释
Ω ( f k ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f_{k})=\gamma T + \frac{1}{2} \lambda\sum_{j=1}^T w_{j}^2 Ω(fk)=γT+

XGBoost,全称为eXtreme Gradient Boosting,是一种梯度增强决策树的机器学习库,尤其擅长处理分类和回归任务。其工作流程通常包括以下几个步骤: 1. **数据加载和预处理**:首先,需要导入数据并进行必要的清洗、缺失值处理、特征缩放等操作。 2. **初始化**:创建一个基础模型,通常是随机森林的一个弱学习器,如决策树的初始预测。 3. **迭代训练**: - **分割数据**:将原始数据集分为训练集和验证集。 - **构建新树**:对于每个决策树,XGBoost会选择最优的特征和切分点来划分数据,目标是最小化残差平方和。 - **提升**:计算当前模型的残差,并用新的决策树去拟合这部分残差,逐步提升模型性能。 - **剪枝**:为了避免过拟合,XGBoost会在每次迭代后对新增的树进行剪枝。 4. **多次迭代**:重复上述过程,直到达到预定的迭代次数或模型效果不再显著提高。 5. **评估和调优**:在验证集上评估模型性能,通过调整超参数(如学习率、最大深度等)优化模型。 6. **预测**:最后,使用训练好的XGBoost模型对未知数据进行预测。 下面是XGBoost算法流程的一个简化示意图: ``` +----------------+ | 数据预处理 | +----------------+ | +----------------+ +----------------+ | 初始模型生成 | | 迭代训练 (树1) | +----------------+ +----------------+ | +----------------+ | 计算残差 | | 分割数据 & 训练| +----------------+ +----------------+ | | +----------------+ +----------------+ | 构建树 & 剪枝 | | 另一决策树 | +----------------+ +----------------+ | ... ... ... ... ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值