极度梯度提升树(eXtreme Gradient Boosting)算法推导

一、极度梯度提升树(XGBoost)的算法原理

      极度梯度提升树整体上仍属于GBDT算法,因此算法也一定是由多个基模型组成的一个加性模型,所以模型可以表示为:

                                                     y\hat{} = \sum_{k=1}^{K} f_{k}^{}(x_{i})                            -------(1)

根据前向分布算法,假设第t次迭代的基模型为 f_t{(x)},有:

                                            y\hat{}_{i}^{(t)} = \sum_{k=1}^{t} y\hat{}_{i}^{(t-1)} + f_{t}(x_{i})                   -------(2)

损失函数基本形式由经验损失项和正则化项构成:

                                         L = \sum_{i=1}^{n}l(y_{i},y\hat{}_{i}) + \sum_{i=1}^{t} \Omega (f_{i})             -------(3)

其中 上式第一项为经验损失项,表示训练数据预测值与真实值之间的损失;第二项为正则化项,表示全部t棵树的复杂度之和,这也是算法控制模型过拟合的方法。

    根据前向分布算法,以第t步为例,假设模型对第i 个样本xi 的预测值为:

                                       y\hat{}_{i}^{(t)} = y\hat{}_{i}^{(t-1)} + f_t{(x_{i})}                   --------(4)

其中y\hat{}_{i}^{(t-1)} 是由第一步的模型给出的预测值,其作为一个已知常量存在,f_t{(x_{i})} 作为第t步树模型的预测值。因而式(3)式的目标函数可以表示为:

                                     L = \sum_{i=1}^{n}l(y_{i},y\hat{}_{i}) + \sum_{i=1}^{t} \Omega (f_{i})              -----(5)

                                    L = \sum_{i=1}^{n}l(y_{i},y\hat{}_{i} ^ {t-1}+f_{t}(x_{i})) + \sum_{i=1}^{t} \Omega (f_{i})    -----(6)

                                     L = \sum_{i=1}^{n}l(y_{i},y\hat{}_{i} ^ {t-1})+f_{t}(x_{i})) + \Omega (f_{i}) + Constant    ------(7)

因为前  t-1 棵树的结构已确定,所以前 t-1 棵树的复杂度之和也可以表示为常数,所以上式后面可分为  \Omega (f_{i})  与常数项。

然后针对(7)式的第一项,使用二阶泰勒展开式(注:形如f(x+\Delta x) = \sum_{k=0}^{r}\frac{f_{}^{(k)}(x)}{k! }(\Delta x)^{k} +o((\Delta x)^{n}) ,取k =2 即展开至二阶项),得到:

                             l(y_{i},y\hat{}_{i} ^ {t-1}+f_{t}(x_{i})) = l(y_{i},y\hat{}_{i} ^ {t-1}) + g_{i}f_{t}(x_{i}) + \frac{1}{2}h_{i}f_{t}^{2}(x_{i})       -----(8)

将(8)式代入(7)式 ,因为在该算法的应用中,损失函数最终是用来比较节点分裂前后损失值差值计算的,因此可以去掉常数项(包括l(y_{i},y\hat{}_{i} ^ {t-1}) 和 Constant),并可重新定义损失函数为去除常数项的新损失函数,可得:

                                           L^{(t)} = \sum_{i=1}^{n} \left [ g_{i}f_{t}(x_{i}) + \frac{1}{2}h_{i}f_{t}^{2}(x_{i})\right ] + \Omega (f_{i})             -------(9)

上式还不能在待分裂节点集中直接求出损失(或者说不方便求出),因此还需要继续推导。可以对决策树做一下定义,假设一颗决策树是由叶子结点的权重w和样本实例到叶子结点的映射关系q构成

                                                              f_{t}(x) = w_{q(x)}             ------------(10)

然后对决策树复杂度的正则化项,模型复杂度可由单棵决策树的叶子结点数T(最大叶子结点数,由实际分裂数量决定)和叶子权重w决定,模型复杂度可由表示为:

                                                    \Omega (f_{i}) = \gamma T + \frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^{2}        ---------------(11)

下面将决策树所有叶子结点重新进行归组,即以样本求和方式转为以对应叶子结点的求和方式。将属于第 j 个叶子结点的所有样本划入一个子节点的样本集合中,即 I_{j} =\left \{ i | q(x_{i})= j \right \}  因而(9)式可以改写为:

                                L^{(t)} = \sum_{i=1}^{n} \left [ g_{i}f_{t}(x_{i}) + \frac{1}{2}h_{i}f_{t}^{2}(x_{i})\right ] + \Omega (f_{i})                 -----------(12)

                                L^{(t)} = \sum_{i=1}^{n} \left [ g_{i}w_{q(x)}) + \frac{1}{2}h_{i}w_{q(x)} ^{2}\right ] + \gamma T + \frac{1}{2}\lambda \sum_{j=1}^{T}w_{j}^{2}   -----(13)

                               L^{(t)} = \sum_{j=1}^{T} \left [ \left [\sum_{i\in I_{j}}^{}g_{i} \right ]w_{j} + \frac{1}{2}\left [\sum_{i\in I_{j}}^{}h_{i} + \gamma \right ]w_{j} ^{2}\right ] + \gamma T----(14)

     将 \left [\sum_{i\in I_{j}}^{}g_{i} \right ]  定义为G_{j}  ,将 \left [\sum_{i\in I_{j}}^{}h_{i} \right ] 定义为H_{j},前者 可以裂解为叶子结点所包含样本的一阶偏导数(对应于t-1 步模型预测值的偏导数)累加之和,后者可以理解为相应的二阶偏导数之和,对应于待分裂的某个结点的集合而言,两者均为常数。

                                       L^{(t)} = \sum_{j=1}^{T} \left [ G_{j}w_{j} + \frac{1}{2}\left (H_{j} + \gamma \right )w_{j} ^{2}\right ] + \gamma T  -----(15)

 观察上述求和式的通项,可知,损失函数变为 分裂后的叶子结点损失函数之和,对于第t棵树,未分裂前 T = 1 ,通过求解 \left[ G_{j}w_{j} + \frac{1}{2}\left (H_{j} + \gamma \right )w_{j} ^{2}\right ] 式的极值,得到未分裂前的最优权重和最优损失函数值,w1 和 L1, 然后继续分裂(分裂成w2,w3),按某个特征某个值分裂后 的 叶子(预定的节点数)结点的最优权重(一般为二分树)和对应损失函数,就是求分裂后的节点的 \left[ G_{j}w_{j} + \frac{1}{2}\left (H_{j} + \gamma \right )w_{j} ^{2}\right ] 式的w极值点和 损失函数极值(若每一次分裂每个叶子结点都达到最优值,整个损失函数也达到最优),因此对应某一节点令前式导数为0  可求得最优的权重与对应损失函数:

                                   w_{j}^{*} = - \frac{G_{j}}{H_{j} + \lambda }      ----(16)    L = -\frac{1}{2}\sum_{j=1}^{T}\frac{G_{j}^{2}}{H_{j} + \lambda } +\gamma T  -----(17)

在此分裂前的损失函数写为:

                                  L_{before} = -\frac{1}{2}\left [ \frac{(G_{L}^{} + G_{R}^{} )^{2}}{H_{L} + H_{R} + \lambda }\right ] +\gamma   ---(18)

                                   L_{after} = -\frac{1}{2}\left [ \frac{G_{L}^{2} }{H_{L} +\lambda } +\frac{G_{R}^{2} }{H_{R} +\lambda }\right ] +2\gamma    ---(19)

                                

  因此分裂后信息增益为:

                         Gain = L_{after} - L_{before} = \frac{1}{2}\left [ \frac{G_{L}^{2} }{H_{L} +\lambda } +\frac{G_{R}^{2} }{H_{R} +\lambda }- \frac{(G_{L}^{} + G_{R}^{} )^{2}}{H_{L} + H_{R} + \lambda }\right ] - \gamma   ---(20)

    如果Gain > 0 则目标函数下降,则考虑此次分裂结果,并考虑遍历所有特征寻找最优特征,即Gain值最大的 作为最优分裂特征,因此w2 、w3 确定,在此基础上进行下一次叶节点分裂,直到达到树分裂约束条件为止。   

    因此,可见极度梯度提升树(XGBoost)最大特点是损失函数展开到了二阶导数来进一步逼近真实损失, 所以该算法的先天特点是 倾向于过拟合。 以上是该算法 的数学推导和基本过程。                    

                                     

                                         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值