XGBoost详解

背景

在看Xgboost之前,先看看笔者写的AdaBoostGBDT

AdaBoost 关注的是哪些错误分类的样本,每次加大误分类样本的权重,训练新的分类器。

GBDT关注的是分类器的残差,每一次训练分类器都是为了不断减小这个残差。

Xgboost可以说是GBDT算法在工程上的一种实现。如下图所示:

在这里插入图片描述
假定这是一家人中每个人想玩游戏的意愿。小男孩玩游戏的意愿是3,爷爷玩游戏的意愿是-3。xgboost 解决这个问题的思路是:先训练第一颗决策树,预测小男孩想玩的意愿是2;再训练第二棵决策树,预测小男孩想玩的意愿是0.9,此时的预测结果是二者之和2.9。这就是xgboost的预测过程:不断拟合残差。当迭代次数达到上限或者残差不断减小,算法停止。

二者的区别在于降低残差的方式不同。GBDT降低残差是通过不断加入新树实现。而XGBoost则可以人为定义损失函数,只需要知道该loss function对参数的一阶、二阶导数便可以进行boosting,其进一步增大了模型的泛化能力,其贪婪法寻找添加树的结构以及loss function中的损失函数与正则项等一系列策略也使得XGBoost预测更准确。

目标函数

XGBoost 算法采用分步向前加法模型,与其他boosting 算法不同的是不需要再计算弱学习器的系数,其加法模型如下:
y ^ i = ∑ t = 1 k f t ( x i ) \hat y_i = \sum_{t=1}^k f_t(x_i) y^i=t=1kft(xi)
其中, f k f_k fk 为第 k 个基模型, y ^ i \hat y_i y^i 为第 i 个样本的预测值,其损失函数如下:
L = ∑ i = 1 n l ( y i , y ^ i ) L = \sum_{i=1}^n l(y_i,\hat y_i) L=i=1nl(yi,y^i)
损失函数代表了模型的偏差,而一个好的模型由方差和偏差共同决定。XGBoost同时还考虑了模型的方差,方差通过模型的复杂度来控制。所以最终的目标函数由损失函数L与抑制模型复杂度的正则项Ω组成
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)
其中 Ω ( f t ) \Omega(f_t) Ω(ft)是正则化项:
Ω ( f t ) = γ T t + λ 2 ∑ j = 1 J ω j 2 \Omega(f_t)=\gamma T_t+\frac{\lambda}{2}\sum_{j=1}^{J}\omega_{j}^2 Ω(ft)=γTt+2λj=1Jωj2
T t T_t Tt:叶子节点数, w j w_j wj:叶子上的节点权重, γ , λ \gamma,\lambda γ,λ是超参数。

注:当正则化为零时,目标回归到传统的梯度提升树。正则化起到了抑制模型复杂度的作用,从而避免了过拟合。

为了进一步理解这个正则化项,请看下图:

在这里插入图片描述
由公式可知模型的复杂度是由决策树的叶子节点数量和权重所共同决定的。

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

(1)原始目标函数Obj

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

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

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

(1)原始目标函数Obj

提升(boosting)模型是前向加法模型,设第 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的泰勒展开

回顾Taylor公式:
f ( x + △ x ) ≈ f ( x ) + f ′ ( x ) △ x + 1 2 f ′ ′ ( x ) △ x 2 f(x+\triangle x) \approx f(x) + f^{'}(x) \triangle x + \frac{1}{2}f^{''}(x) \triangle x^2 f(x+x)f(x)+f(x)x+21f(x)x2
对于目标函数中的 l ( y i , y ^ i t − 1 + f t ( x i ) ) l\left(y_i, \hat y_i^{t-1} + f_t(x_i)\right) l(yi,y^it1+ft(xi)),将 y ^ i t − 1 \hat y_i^{t-1} y^it1 视为 x x x,$ f_t(x_i) 视 为 视为 \triangle x$ ,那么目标函数可以写成:
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i t − 1 + f t ( x i ) ) + ∑ i = 1 t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值