XGBoost算法的相关知识

XGBoost是基于梯度提升决策树的机器学习算法,它在GBDT基础上进行了优化,特别是目标函数的定义和正则化处理。通过损失函数的二阶泰勒展开,XGBoost可以快速优化模型,并通过正则项控制模型复杂度,防止过拟合。此外,XGBoost还采用了特征采样、样本采样、早停策略等手段来提高效率和泛化能力。
摘要由CSDN通过智能技术生成

背景

讲XGBoost之前,先引入一个实际问题,即预测一家人每个人玩游戏的意愿值:

img

如果我们用XGBoost解决这个问题,步骤是:首先要训练出来第一棵决策树, 预测了一下小男孩想玩游戏的意愿是2, 然后发现离标准答案差一些,再训练出第二棵决策树, 预测了一下小男孩想玩游戏的意愿是0.9, 最后两个相加就是最终的答案2.9。也就是说,XGBoost是把训练出来的弱分类结果进行累加当作最终的结论。

XGBoost的思想和GBDT有相似之处,比较大的不同就是目标函数的定义,即XGBoost聚焦与标准答案的残差。准确来说它是一种GBDT的工业级实现。其主要原理是在GBDT的基础上,在损失函数加入正则化部分,并且每一轮迭代对损失函数做二阶泰勒展开,加快对损失函数的优化速度。

XGBoost算法也是采用分步前向加性模型,只不过与GBDT不同,在每次迭代中生成弱学习器后不再需要计算一个系数。XGBoost 是由 k 个基模型组成的一个加法运算式:
y ^ i = ∑ t = 1 k f t ( x i ) \hat y_i = \sum^k_{t=1}f_t(x_i) y^i=t=1kft(xi)
其中, f t f_t ft是第t个模型,损失函数可以由真实值 y i y_i yi和预测值 y ^ i \hat y_i y^i表示:
L = ∑ t = 1 N l ( y i , y ^ i ) L = \sum^N_{t=1}l(y_i, \hat y_i) L=t=1Nl(yi,y^i)
其中N是样本个数。

定义损失函数

对于第m棵树而言,XGBoost的损失函数在GBDT损失函数中加入了如下的正则化:
Ω ( f t ) = γ T t + λ 2 ∑ j = 1 T ω j 2 \Omega(f_t)=\gamma T_t+\frac{\lambda}{2}\sum_{j=1}^{T}\omega_{j}^2 Ω(ft)=γTt+2λj=1Tωj2
T t T_t Tt:叶子节点数, w j w_j wj:叶子上的节点权重, γ , λ \gamma,\lambda γ,λ是超参数。当正则化为零时,目标回归到传统的梯度提升树。正则化起到了抑制模型复杂度的作用,从而避免了过拟合。

这里的 ω j \omega_{j} ωj 和在GBDT里面使用的 c j c_{j} cj 其实是一个意思,只是XGBoost论文里面使用 ω \omega ω 符号表示叶子区域的值,这里为了和论文保持一致。最终,XGBoost的目标(损失)函数可以表示为:
O b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ t = 1 k Ω ( f t ) Obj =\sum_{i=1}^n l(y_i,\hat y_i) + \sum_{t=1}^k \Omega(f_t) Obj=i=1nl(yi,y^i)+t=1kΩ(ft)
我们要极小化上面这个损失函数,得到第决策树最优的所有 J J J个叶子节点对应的区域和每个叶子节点区域的最优解 ω j \omega_{j} ωj

接下来一步一步的对这个目标函数 O b j Obj Obj 进行化简。主要由以下四步组成:

(1)原始目标函数Obj

(2)原始目标函数Obj的泰勒展开

(3)具体化目标函数的泰勒展开细节

(4)求解目标函数中的 w j w_j wj,并带入目标函数,得到最终版目标函数

(1)原始目标函数Obj

XGBoost在损失函数优化方面做了一些优化,基于损失函数的二阶泰勒展开式来求解。XGBoost算法也是采用分步前向加性模型,设第 t − 1 t-1 t1步模型的输出为 y ^ i t − 1 \hat y_i^{t-1} y^it1,则第 t t t步模型的第 i i i个样本 x i x_i xi 的预测为:
y ^ i t = y ^ i t − 1 + f t ( x i ) \hat y_i ^t = \hat y_i^{t-1} + f_t(x_i) y^it=y^it1+ft(xi)
f t ( x i ) f_t(x_i) ft(xi)是需要新加入的模型。将 y ^ i t \hat y_i ^t y^it 带入Obj,则有:
O b j t = ∑ i = 1 n l ( y i , y ^ i t ) + ∑ i = 1 t Ω ( f t ) = ∑ i = 1 n l ( y i , y ^ i t − 1 + f t ( x i ) ) + ∑ i = 1 t Ω ( f t ) \begin{aligned} Obj^{t} &=\sum_{i=1}^n l(y_i,\hat y_i^t) + \sum_{i=1}^t \Omega(f_t) \\ &=\sum_{i=1}^n l\left(y_i, \hat y_i^{t-1} + f_t(x_i)\right) + \sum_{i=1}^t \Omega(f_t) \end{aligned} Objt=i=1nl(yi,y^it)+i=1tΩ(ft)=i=1nl(yi,y^it1+ft(xi))+i=1tΩ(ft)
我们的目标是:求解当前的树 f t ( x i ) f_t(x_i) ft(xi),使得Obj 最小。 也就是:新生成的决策树要不断地拟合残差。

(2)原始目标函数Obj的泰勒展开

y ^ i t − 1 \hat y_i^{t-1} y^it1 视为参数,将 f t ( x i ) f_t(x_i) ft(xi)视为参数的增量,现在来看看这个损失函数的二阶泰勒展开式:
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i t − 1 + f t ( x i ) ) + ∑ i = 1 t Ω ( f t ) ≈ ∑ i = 1 N ( l ( y i , y ^ i t − 1 ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值