XGBoost论文阅读

1. Main Work

1.1Tree Boosting with Loss function

假设给定一个数据集 D D D中有 n n n个样本,每个样本有 m m m维特征,通过训练数据集 D D D,我们得到 k k k棵树。这 k k k棵树累加的值就是我们的预测值。
y ^ i = ∑ k = 1 k f k ( x i ) f k ∈ F \widehat{y}_i=\sum_{k=1}^kf_k(x_i)\qquad f_k\in\mathcal{F} y i=k=1kfk(xi)fkF
其中 f k ( x i ) f_k(x_i) fk(xi)表示第 k k k棵树预测 x i x_i xi F \mathcal{F} F表示树的集合
目标函数:
o b j = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k = 1 k Ω ( f k ) obj=\sum_{i=1}^nl(y_i,\widehat{y}_i)+\sum_{k=1}^k\Omega(f_k) obj=i=1nl(yi,y i)+k=1kΩ(fk)

l ( y i , y ^ i ) l(y_i,\widehat{y}_i) l(yi,y i)是损失函数,根据具体的问题,损失函数可以做不同的设定,回归是MSE,分类是交叉熵。 Ω ( f k ) \Omega(f_k) Ω(fk)是树的复杂度,也是正则项,减少过拟合。
Ω ( f k ) = γ T + λ ∑ i = 1 T w j 2 \Omega(f_k)=\gamma T+ \lambda\sum_{i=1}^Tw_j^2 Ω(fk)=γT+λi=1Twj2
T T T表示叶节点的个数, w j 2 w_j^2 wj2表示叶节点的值。

1.2Gradient Tree Boosting

对于损失函数我们可以将它预测值展开层 k k k棵树的预测值叠加的形式,在 t t t次迭代中,我们可以将树展开成:
y i = ∑ k = 1 t f k ( x i ) = f 1 ( x i ) + f 2 ( x i ) + . . . + f t − 1 ( x i ) + f t ( x i ) y_i=\sum_{k=1}^tf_k(x_i)=f_1(x_i)+f_2(x_i)+...+f_{t-1}(x_i)+f_t(x_i) yi=k=1tfk(xi)=f1(xi)+f2(xi)+...+ft1(xi)+ft(xi)
但我们训练第 k k k棵树的时候
o b j = ∑ i = 1 n l ( y i , y ^ i ( k − 1 ) + f k ( x i ) ) + ∑ i = 1 k − 1 Ω ( f i ) + Ω ( f k ) obj=\sum_{i=1}^nl(y_i,\widehat{y}_i^{(k-1)}+f_k(x_i))+\sum_{i=1}^{k-1}\Omega(f_i)+\Omega(f_k) obj=i=1nl(yi,y i(k1)+fk(xi))+i=1k1Ω(fi)+Ω(fk)
去除已知项,则 o b j obj obj
o b j = ∑ i = 1 n l ( y i , y ^ i ( k − 1 ) + f k ( x i ) ) + Ω ( f k ) obj=\sum_{i=1}^nl(y_i,\widehat{y}_i^{(k-1)}+f_k(x_i))+\Omega(f_k) obj=i=1nl(yi,y i(k1)+fk(xi))+Ω(fk)
对上式进行二阶泰勒展开得到如下近似目标函数:
o b j k ≈ ∑ i = 1 n [ l ( y i , y ^ i ( k − 1 ) ) + ∂ y ^ ( k − 1 ) l ( y i , y ^ i ( k − 1 ) ) f k ( x i ) + 1 2 ∂ y ^ ( k − 1 ) 2 l ( y i , y ^ i ( k − 1 ) ) f k 2 ( x i ) ] + Ω ( f k ) = ∑ i = 1 n [ l ( y i , y ^ i ( k − 1 ) ) + g i f k ( x i ) + 1 2 h i f k 2 ( x i ) ] + Ω ( f k ) obj_k \approx \sum_{i=1}^n[l(y_i, \widehat{y}_i^{(k-1)})+\partial_{\widehat{y}^{(k-1)}}l(y_i, \widehat{y}_i^{(k-1)})f_k(x_i)+\frac{1}{2}\partial_{\widehat{y}^{(k-1)}}^2l(y_i, \widehat{y}_i^{(k-1)})f_k^2(x_i)]+\Omega(f_k) \\ = \sum_{i=1}^n[l(y_i, \widehat{y}_i^{(k-1)})+g_if_k(x_i)+\frac{1}{2}h_if_k^2(x_i)]+\Omega(f_k) objki=1n[l(yi,y i(k1))+y (k1)l(yi,y i(k1))fk(xi)+21y (k1)2l(yi,y i(k1))fk2(xi)]+Ω(fk)=i=1n[l(yi,y i(k1))+gifk(xi)+21hifk2(xi)]+Ω(fk)
当前模型已知,也就是当前模型对训练数据的误差已知,为常量,对目标函数的优化没有影响,移除得到如下的目标函数:
o b j k = ∑ i = 1 n [ g i f k ( x i ) + 1 2 h i f k 2 ( x i ) ] + γ T + λ ∑ i = 1 T w j 2 = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T obj_k = \sum_{i=1}^n[g_if_k(x_i)+\frac{1}{2}h_if_k^2(x_i)]+\gamma T+ \lambda\sum_{i=1}^Tw_j^2 \\ = \sum_{j=1}^T[( \sum_{i \in I_j}g_i)w_j+\frac{1}{2}( \sum_{i \in I_j}h_i+\lambda)w_j^2]+\gamma T objk=i=1n[gifk(xi)+21hifk2(xi)]+γT+λi=1Twj2=j=1T[(iIjgi)wj+21(iIjhi+λ)wj2]+γT
w j w_j wj这个二元一次函数取最小值,所以:
w j ∗ = ∑ i ∈ I j g i ∑ i ∈ I j h i + λ w_j^*=\frac{\sum_{i \in I_j}g_i}{ \sum_{i \in I_j}h_i+\lambda} wj=iIjhi+λiIjgi
o b j ∗ = − 1 2 ∑ j = 1 T ( ∑ i ∈ I j g i ) 2 ∑ i ∈ I j h i + λ + γ T obj^*=-\frac{1}{2} \sum_{j=1}^T \frac{ (\sum_{i \in I_j}g_i)^2}{\sum_{i \in I_j}h_i+\lambda}+\gamma T obj=21j=1TiIjhi+λ(iIjgi)2+γT
此时已知一棵树的形状的时候,就能够求出这棵树对应的 w j w_j wj o b j k obj_k objk,一个方法是把所有可能的树的形状全列出来,分别计算 o b j k ( i ) obj_k^{(i)} objk(i)。选择最小的那个 o b j k obj_k objk返回对应的树形状。但是这么做存在一个问题,就是随着数据的增大,确定树的个数是指数级上升的,存在巨大的计算量。所以文章下面的部分就是考虑如何分裂树结构。选择合适的feature作为分割点,将数据分割到两边,用 o b j k o l d − o b j k n e w obj_k^{old}-obj_k^{new} objkoldobjknew的最大值的那个特征作为split的条件:
O b j s p l i t = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ − ( ∑ i ∈ I g i ) 2 ∑ i ∈ I h i + λ ] − γ Obj_{split}=\frac{1}{2}\bigg[\frac{(\sum_{i \in I_L}g_i)^2}{\sum_{i \in I_L}h_i+\lambda}+\frac{(\sum_{i \in I_R}g_i)^2}{\sum_{i \in I_R}h_i+\lambda}-\frac{(\sum_{i \in I}g_i)^2}{\sum_{i \in I}h_i+\lambda}\bigg]-\gamma Objsplit=21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2iIhi+λ(iIgi)2]γ
在这里插入图片描述

2.split finding algorithms

2.1exact greedy algorithm

exact greedy algorithm是一种切分点查找算法,如Algorithm 1所示。该算法对于每一个feature,试图枚举出所有可能的切分点,并计算在每一个切分点上的增益,从而选择增益最好的切分点。在algorithm1中要枚举出所有的可能的切分点,算法是首先对所有训练数据对feature k的取值进行排序,这样就能轻易地枚举出所有的切分点。
在这里插入图片描述

2.2Approximate Algorithm

exact greedy algorithm很强大,但当训练数据量太大以至于无法完全读进内存或者运行在分布式计算资源上,就有问题了。所以论文总结了一种approximate algorithm, 如algorithm 2
在这里插入图片描述
algorithm2针对feature k先是根据特征分布的percentile列出了L个待选切分点(candidate splitting point),切分点值的集合 S k S_k Sk,之后根据 O b j s p l i t Obj_{split} Objsplit公式分别计算这些待选切分点的增益,选择增益最好的切分点。根据feature k大小不同——是在训练的一开始就对全部训练数据的feature k列出待选切分点还是对分到某个结点上的训练数据的feature k,approximate algorithm有两种变体——global、local.

2.3Sparsity-aware Split Finding

在实际场景中,数据缺失很常见,如果某实例点的特征值缺失,上述算法无法将该实例点分到任一子结点。对此论文提出了稀疏感知的切分点查找算法。原理大概是对于特征值缺失的实例点,分别将其分到左右子结点,计算增益,选择增益最好的划分方式作为该特征缺失情况下的默认划分。
在这里插入图片描述
在这里插入图片描述

参考

https://blog.csdn.net/w928485096/article/details/90107568
https://arxiv.org/pdf/1603.02754.pdf

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值