一文看懂提升树与梯度提升树(GBDT)
创始人
2024-05-20 07:29:46
0

1 提升方法与提升树概述

之前讲到的 AdaBoost 是提升方法中最典型的算法思路之一,提升方法则采用加法模型(基函数的线性组合)与前向分步算法,而 AdaBoost 只是将损失函数指定为指数损失函数的提升方法而已。提升树是以分类树或回归树为基本分类器的提升方法。其被认为是统计学习中性能最好的方法之一。

实际上,AdaBoost 更多的是一种算法思路,其并没有指定基函数是决策树还是其他。

对于分类问题,提升树的基决策树是二叉分类树;对于回归问题,提升树的基决策树是二叉回归树。提升树模型可以表示为决策树的加法模型:
fM(x)=∑m=1MT(x;Θm)f_M(x) = \sum_{m=1}^MT(x;\Theta_m) fM​(x)=m=1∑M​T(x;Θm​)
其中,T(x;Θm)T(x;\Theta_m)T(x;Θm​) 表示决策树,Θm\Theta_mΘm​ 为决策树的参数,MMM 为树的个数。

2 二分类提升树

对于二类分类问题,提升树算法只需将 AdaBoost 算法中的基本分类器限制为二类分类树即可,即基分类器均为只有一个根节点,两个叶子节点的分类树。此时的提升树算法是 Adaboost 算法的特殊情况。首先回顾一下 AdaBoost 算法:
f(x)=∑m=1MαmGm(x)=α1G1(x)+α2G2(x)+⋯+αMGM(x)\begin{aligned} f(x) &= \sum_{m=1}^M \alpha_mG_m(x)\\ &= \alpha_1G_1(x) + \alpha_2G_2(x) + \cdots + \alpha_MG_M(x) \end{aligned} f(x)​=m=1∑M​αm​Gm​(x)=α1​G1​(x)+α2​G2​(x)+⋯+αM​GM​(x)​
二分类提升树的 Gm(x)​G_m(x)​Gm​(x)​ 均为二类分类树,αm​\alpha_m​αm​​ 均为 1。即:
f(x)=T(x;Θ1)+T(x;Θ2)+⋯+T(x;ΘM)f(x) = T(x;\Theta_1) + T(x;\Theta_2) + \cdots + T(x;\Theta_M) f(x)=T(x;Θ1​)+T(x;Θ2​)+⋯+T(x;ΘM​)
总模型为
G(x)={1,f(x)≤k−1,f(x)>kG(x) = \begin{cases} 1,\ \ \ f(x)\le k\\ -1,f(x)\gt k \end{cases} G(x)={1,   f(x)≤k−1,f(x)>k​
二分类提升树的损失函数仍是指数损失函数,只要用指数损失函数,就可以进行调整样本数据的权值,从而让每个基分类器学到不同的样本内容。

3 回归问题的提升树

假设有训练集 T={(x1,y1),(x2,y2),⋯,(xN,yN)}T=\{ (x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N) \}T={(x1​,y1​),(x2​,y2​),⋯,(xN​,yN​)},xi∈X⊆Rnx_i\in X \subseteq \Bbb R^nxi​∈X⊆Rn,XXX 为输入空间,yi∈Y⊆Ry_i\in Y \subseteq \Bbb Ryi​∈Y⊆R ,YYY 为输出空间。根据回归树理论,如果将输入空间 XXX 划分为 JJJ 个互不相交的区域 R1,R2,⋯,RJR_1,R_2,\cdots,R_JR1​,R2​,⋯,RJ​,并且在每个区域上确定输出的常量 cjc_jcj​ ,那么树可以表示为:
T(x;Θ)=∑j=1JcjI(x∈Rj)T(x;\Theta) = \sum_{j=1}^Jc_jI(x\in R_j) T(x;Θ)=j=1∑J​cj​I(x∈Rj​)
其中,参数 Θ={(R1,c1),(R2,c2),⋯(RJ,cJ)}\Theta = \{ (R_1,c_1),(R_2,c_2),\cdots(R_J,c_J) \}Θ={(R1​,c1​),(R2​,c2​),⋯(RJ​,cJ​)} 表示树的区域划分和各区域上的常数。JJJ 是回归树的复杂度即叶节点个数。

回归问题提升树使用以下前向分步算法:
f0(x)=0fm(x)=fm−1(x)+T(x;Θm),m=1,2,⋯,MfM(x)=∑m=1MT(x;Θm)\begin{aligned} &f_0(x) = 0\\ &f_m(x) = f_{m-1}(x) + T(x;\Theta_m),\ m=1,2,\cdots,M\\ &f_M(x) = \sum_{m=1}^MT(x;\Theta_m) \end{aligned} ​f0​(x)=0fm​(x)=fm−1​(x)+T(x;Θm​), m=1,2,⋯,MfM​(x)=m=1∑M​T(x;Θm​)​
在前向分步算法的第 m​m​m​ 步,给定当前模型 fm−1(x)​f_{m-1}(x)​fm−1​(x)​,需求解
Θ^m=arg⁡min⁡Θm∑i=1NL(yi,fm−1(xi)+T(xi;Θm))\hat\Theta_m=\arg\min_{\Theta_m}\sum_{i=1}^NL\big(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)\big) Θ^m​=argΘm​min​i=1∑N​L(yi​,fm−1​(xi​)+T(xi​;Θm​))
得到 Θ^m\hat\Theta_mΘ^m​ ,即第 mmm 棵树的参数。

当采用平方误差损失函数时,
L(y,f(x))=(y−f(x))2L(y,f(x)) = (y-f(x))^2 L(y,f(x))=(y−f(x))2
则损失函数 L(yi,fm−1(xi)+T(xi;Θm))​L\big(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)\big)​L(yi​,fm−1​(xi​)+T(xi​;Θm​))​ 演化为:
L(yi,fm−1(xi)+T(xi;Θm))=[y−fm−1(xi)−T(xi;Θm)]2=[r−T(xi;Θm)]2\begin{aligned} L\big(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)\big) &= [y-f_{m-1}(x_i)-T(x_i;\Theta_m)]^2\\ &= [r-T(x_i;\Theta_m)]^2 \end{aligned} L(yi​,fm−1​(xi​)+T(xi​;Θm​))​=[y−fm−1​(xi​)−T(xi​;Θm​)]2=[r−T(xi​;Θm​)]2​
上式中 r=y−fm−1(xi)r = y-f_{m-1}(x_i)r=y−fm−1​(xi​) ,即 m−1m-1m−1 轮所得模型的残差。因此对于回归问题的提升树算法来说,若采用平方误差损失函数,只需简单地拟合当前模型的残差,就能够选出第 m​m​m​ 棵树的参数,进而得到完整模型。

第 mmm 棵树应尽可能地拟合当前模型的残差,这样随着 MMM 的增大,整体模型将越来越逼近真实值(L(y,y^)L(y,\hat y)L(y,y^​) 的值越来越小)。

回归问题的提升树基本思路即用残差去训练个体学习器,然后将所有个体学习器相加,这也是为什么要将 f0(x)=0f_0(x) = 0f0​(x)=0 的原因,即 f0f_0f0​ 与 yyy 的残差就是 yyy 本身。

4 回归问题的梯度提升树

提升树利用加法模型与前向分步算法实现学习的优化过程。当损失函数式平方损失和指数损失函数时,每一步优化是很简单的。但对于一般的损失函数而言,往往每一步优化并不那么容易。针对这一问题, Freidman 提出了梯度提升(gradient boosting)算法。它是一种前向分步算法、采用梯度提升进行每一步的优化,基学习器被限定为回归树的提升系列算法。它的目的是当使用除平方损失函数外的其他损失函数或自定义损失函数时,以一种简单通用的形式求解:
Θ^m=arg⁡min⁡Θm∑i=1NL(yi,fm−1(xi)+T(xi;Θm)).\hat\Theta_m=\arg\min_{\Theta_m}\sum_{i=1}^NL\big(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)\big). Θ^m​=argΘm​min​i=1∑N​L(yi​,fm−1​(xi​)+T(xi​;Θm​)).
这个式子在上一节中已经提到,解它可以在已知 m−1m-1m−1 轮模型时得到第 mmm 棵树的参数 Θ^m\hat\Theta_mΘ^m​ 。

对于任意损失函数,我们该如何像普通的回归问题提升树那样仅使用残差来进行拟合呢?我们需要来点核心前提:

  • 模型存在多个优化器,不断地迭代优化;
  • 确保每增加一个基学习器,都要使得总体损失越来越小。

对于第二点,可以使用数学公式表达
L(y,fm(x)) 即:
L(y,fm−1(x))−L(y,fm(x))>0.L(y,f_{m-1}(x))-L(y,f_m(x))\gt 0. L(y,fm−1​(x))−L(y,fm​(x))>0.
核心前提有了,我们尝试对损失函数进行一些改造。

已知一阶泰勒展开为
f(x)≈f(x0)+f(x0)′(x−x0)f(x) \approx f(x_0) + f(x_0)'(x-x_0) f(x)≈f(x0​)+f(x0​)′(x−x0​)
则 L(y,fm(x))​L(y,f_m(x))​L(y,fm​(x))​ 的一阶泰勒展开为:
L(y,fm(x))≈L(y,fm−1(x))+∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)⋅(fm(x)−fm−1(x))≈L(y,fm−1(x))+∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)⋅T(x,Θm)\begin{aligned} L(y,f_m(x)) &\approx L\big(y,f_{m-1}(x)\big) + \frac{\partial L(y,f(x))}{\partial f(x)}\Bigg|_{f(x)=f_{m-1}(x)} \cdot \big(f_m(x)-f_{m-1}(x)\big)\\ &\approx L\big(y,f_{m-1}(x)\big) + \frac{\partial L(y,f(x))}{\partial f(x)}\Bigg|_{f(x)=f_{m-1}(x)} \cdot T(x,\Theta_m) \end{aligned} L(y,fm​(x))​≈L(y,fm−1​(x))+∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​⋅(fm​(x)−fm−1​(x))≈L(y,fm−1​(x))+∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​⋅T(x,Θm​)​
将上式移项,得:
L(y,fm−1(x))−L(y,fm(x))≈−∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)⋅T(x,Θm)L\big(y,f_{m-1}(x)\big) - L\big(y,f_m(x)\big) \approx -\frac{\partial L(y,f(x))}{\partial f(x)}\Bigg|_{f(x)=f_{m-1}(x)} \cdot T(x,\Theta_m) L(y,fm−1​(x))−L(y,fm​(x))≈−∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​⋅T(x,Θm​)
当令 T(x,Θm)≈−∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)​T(x,\Theta_m) \approx -\frac{\partial L(y,f(x))}{\partial f(x)}\Big|_{f(x)=f_{m-1}(x)}​T(x,Θm​)≈−∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​​ 时,可以令我们第二个的核心前提成立,即:
L(y,fm−1(x))−L(y,fm(x))≥0.L(y,f_{m-1}(x))-L(y,f_m(x))\ge 0. L(y,fm−1​(x))−L(y,fm​(x))≥0.
也就是说,此时
L(y,fm−1(x))≥L(y,fm(x)).L(y,f_{m-1}(x))\ge L(y,f_m(x)). L(y,fm−1​(x))≥L(y,fm​(x)).
这说明,如果令 T(x,Θm)≈−∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)​T(x,\Theta_m) \approx -\frac{\partial L(y,f(x))}{\partial f(x)}\Big|_{f(x)=f_{m-1}(x)}​T(x,Θm​)≈−∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​​ ,则加上一个基决策树后,损失不可能增大,只会不变或减小。

于是令 rm(x,y)=−∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)r_m(x,y) = -\frac{\partial L(y,f(x))}{\partial f(x)}\Big|_{f(x)=f_{m-1}(x)}rm​(x,y)=−∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​ ,将 (xi,yi)(x_i,y_i)(xi​,yi​) 代入 rm(x,y)r_m(x,y)rm​(x,y) ,得相应的 rmir_{mi}rmi​。进而新一轮基树的训练数据集为:
Tm={(x1,rm1),(x2,rm2),⋯,(xN,rmN)}.T_m = \{(x_1,r_{m1}),(x_2,r_{m2}),\cdots,(x_N,r_{mN})\}. Tm​={(x1​,rm1​),(x2​,rm2​),⋯,(xN​,rmN​)}.

4.1 计算步骤

如果是回归问题,预测就会相对简单很多,因为输出的残差值本身就是数值型的。GBDT 回归算法的损失函数就有比较多的选择了,例如平方损失函数、绝对值损失函数、Huber 损失函数和分位数回归损失函数,这些损失函数都可以非常方便地进行一阶导函数的计算。这里不妨以平方损失函数为例,介绍 GBDT 回归算法的计算过程:

(1)初始化一棵仅包含根节点的树,并寻找到一个常数 Const 能够使损失函数达到极小值:
f0(x)=arg⁡min⁡c∑i=1NL(yi,c)f_0(x) = \arg\min_c\sum_{i=1}^NL(y_i,c) f0​(x)=argcmin​i=1∑N​L(yi​,c)
(2)计算损失函数的负梯度值,用作残差的估计值,即:
rmi=−[∂L(yi,f(xi))∂f(xi)]f(x)=fm−1(x)=−[∂12(yi−f(xi))2∂f(xi)]f(x)=fm−1(x)=yi−f(xi)\begin{aligned} r_{mi} &= -\Big[ \frac{\partial L(y_i,f(x_i))}{\partial f(x_i)} \Big]_{f(x)=f_{m-1}(x)}\\ &= -\Big[ \frac{\partial \frac12(y_i-f(x_i))^2}{\partial f(x_i)} \Big]_{f(x)=f_{m-1}(x)}\\ &= y_i-f(x_i) \end{aligned} rmi​​=−[∂f(xi​)∂L(yi​,f(xi​))​]f(x)=fm−1​(x)​=−[∂f(xi​)∂21​(yi​−f(xi​))2​]f(x)=fm−1​(x)​=yi​−f(xi​)​
(3)利用数据集 (xi,rmi)(x_i,r_{mi})(xi​,rmi​) 拟和下一轮基础模型,得到对应的 JJJ 个叶子节点 RmjR_{mj}Rmj​,j=1,2,⋯,Jj = 1,2,\cdots,Jj=1,2,⋯,J;计算每个叶子节点 RmjR_{mj}Rmj​ 的最佳拟合值,用以估计残差 rmir_{mi}rmi​:
fm(x)=∑j=1JcmjI(xi∈Rmj)f_m(x) = \sum_{j=1}^Jc_{mj}I(x_i\in R_{mj}) fm​(x)=j=1∑J​cmj​I(xi​∈Rmj​)
其中,cmj=arg⁡min⁡c∑xi∈Rmj12(yi−(fm−1(xi)+c))2c_{mj}=\arg\min_c\sum_{x_i\in R_{mj}}\frac12(y_i-(f_{m-1}(x_i)+c))^2cmj​=argminc​∑xi​∈Rmj​​21​(yi​−(fm−1​(xi​)+c))2。

(4)重复(2)和(3),并利用 mmm 个基础模型,构建梯度提升模型:
fM(x)=fm−1(x)+fm(x)=∑m=1M∑j=1JcmjI(xi∈Rmj)\begin{aligned} f_M(x) &= f_{m-1}(x) + f_m(x)\\ &=\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x_i\in R_{mj}) \end{aligned} fM​(x)​=fm−1​(x)+fm​(x)=m=1∑M​j=1∑J​cmj​I(xi​∈Rmj​)​
如上几个步骤中,cmjc_{mj}cmj​ 表示第 mmm 个基础模型 fm(x)f_m(x)fm​(x) 在叶节点 jjj 上的预测值;fM(x)f_M(x)fM​(x) 表示由 MMM 个基础模型构成的梯度提升树,它是每一个基础模型在样本点 xix_ixi​ 处的输出值 cmj​c_{mj}​cmj​​ 之和。

5 分类问题的梯度提升树

当因变量为离散的类别变量时,无法直接利用各个类别值拟合残差 rmi​r_{mi}​rmi​​(因为残差是连续的数值型)。为了解决这个问题,通常将 GBDT 算法的损失函数设置为指数损失函数或对数似然损失函数,进而可以实现残差的数值化。如果损失函数选择为指数损失函数,GBDT 算法实际上退化为 AdaBoost 算法;如果损失函数选择为交叉熵损失函数,GBDT 算法的残差类似于 Logistic 回归的交叉熵损失。

回顾逻辑回归:
Z=w1x1+w2x2+⋯+wNxN+b=wx+b.Z = w_1x_1+w_2x_2+\cdots + w_Nx_N+b = wx+b. Z=w1​x1​+w2​x2​+⋯+wN​xN​+b=wx+b.
预测值为:
y^=11+e−Z\hat y = \frac1{1+e^{-Z}} y^​=1+e−Z1​
损失函数为:
J=−1m∑i=1my(i)log⁡y^(i)+(1−y(i))log⁡(1−y(i))J = -\frac1m\sum_{i=1}^my^{(i)}\log \hat y^{(i)} + (1-y^{(i)})\log(1-y^{(i)}) J=−m1​i=1∑m​y(i)logy^​(i)+(1−y(i))log(1−y(i))
其核心是通过 Sigmoid 函数,将二分类问题转变为 0∼1​0\sim1​0∼1​ 概率分布问题。

分类问题梯度提升树的损失函数的演化——以交叉熵损失函数为例
L(y,y^)=−ylog⁡y^−(1−y)log⁡(1−y^)=−ylog⁡11+efM(x)−(1−y)log⁡(1−11+e−fM(x))=−y(log⁡1−log⁡(1+e−fM(x)))−(1−y)log⁡(e−fM(x)1+e−fM(x))=−y(log⁡1−log⁡(1+e−fM(x)))−(1−y)(log⁡e−fM(x)−log⁡(1+e−fM(x)))=ylog⁡(1+e−fM(x))−log⁡e−fM(x)+log⁡(1+e−fM(x))+ylog⁡e−fM(x)−ylog⁡(1+e−fM(x))=fM(x)−yfM(x)+log⁡(1+e−fM(x))=log⁡(1+e−fM(x))+(1−y)fM(x)\begin{aligned} L(y,\hat y) &= -y\log\hat y - (1-y)\log(1-\hat y)\\ &= -y\log\frac1{1+e^{f_M(x)}} - (1-y)\log(1-\frac1{1+e^{-f_M(x)}})\\ &= -y\big(\log1-\log(1+e^{-f_M(x)})\big)-(1-y)\log(\frac{e^{-f_M(x)}}{1+e^{-f_M(x)}})\\ &= -y\big(\log1-\log(1+e^{-f_M(x)})\big)-(1-y)\big(\log e^{-f_M(x)} - \log(1+e^{-f_M(x)})\big)\\ &= y\log(1+e^{-f_M(x)}) - \log e^{-f_M(x)} + \log(1+e^{-f_M(x)}) + y\log e^{-f_M(x)} - y\log(1+e^{-f_M(x)})\\ &= f_M(x) - yf_M(x) + \log(1+e^{-f_M(x)})\\ &= \log(1+e^{-f_M(x)}) + (1-y)f_M(x) \end{aligned} L(y,y^​)​=−ylogy^​−(1−y)log(1−y^​)=−ylog1+efM​(x)1​−(1−y)log(1−1+e−fM​(x)1​)=−y(log1−log(1+e−fM​(x)))−(1−y)log(1+e−fM​(x)e−fM​(x)​)=−y(log1−log(1+e−fM​(x)))−(1−y)(loge−fM​(x)−log(1+e−fM​(x)))=ylog(1+e−fM​(x))−loge−fM​(x)+log(1+e−fM​(x))+yloge−fM​(x)−ylog(1+e−fM​(x))=fM​(x)−yfM​(x)+log(1+e−fM​(x))=log(1+e−fM​(x))+(1−y)fM​(x)​
综上,在选择第 m​m​m​ 棵树时,分类问题梯度提升树的损失函数为:
L(y,fm(x))=log⁡(1+e−fm(x))+(1−y)fm(x)L(y,f_m(x)) = \log(1+e^{-f_m(x)}) + (1-y)f_m(x) L(y,fm​(x))=log(1+e−fm​(x))+(1−y)fm​(x)
计算负梯度
∂L(y,fm(x))∂fm(x)=∂log⁡(1+e−fm(x))∂fm(x)+1−y=∂log⁡(1+e−fm(x))∂(1+e−fm(x))×∂(1+e−fm(x))∂e−fm(x)×∂e−fm(x)∂fm(x)+1−y=11+e−fm(x)×1×(−e−fm(x))+1−y=−e−fm(x)1+e−fm(x)+1−y=11+e−fm(x)−y\begin{aligned} \frac{\partial L(y,f_m(x))}{\partial f_m(x)} &= \frac{\partial\log(1+e^{-f_m(x)})}{\partial f_m(x)} + 1 - y\\ &= \frac{\partial\log(1+e^{-f_m(x)})}{\partial(1+e^{-f_m(x)})}\times \frac{\partial(1+e^{-f_m(x)})}{\partial e^{-f_m(x)}}\times\frac{\partial e^{-f_m(x)}}{\partial f_m(x)} + 1 - y\\ &= \frac1{1+e^{-f_m(x)}}\times1\times(-e^{-f_m(x)}) + 1 - y\\ &= -\frac{e^{-f_m(x)}}{1+e^{-f_m(x)}} +1 -y\\ &= \frac1{1+e^{-f_m(x)}} - y \end{aligned} ∂fm​(x)∂L(y,fm​(x))​​=∂fm​(x)∂log(1+e−fm​(x))​+1−y=∂(1+e−fm​(x))∂log(1+e−fm​(x))​×∂e−fm​(x)∂(1+e−fm​(x))​×∂fm​(x)∂e−fm​(x)​+1−y=1+e−fm​(x)1​×1×(−e−fm​(x))+1−y=−1+e−fm​(x)e−fm​(x)​+1−y=1+e−fm​(x)1​−y​

−∂L(y,fm(x))∂fm(x)=y−11+e−fm(x)-\frac{\partial L(y,f_m(x))}{\partial f_m(x)} = y - \frac1{1+e^{-f_m(x)}} −∂fm​(x)∂L(y,fm​(x))​=y−1+e−fm​(x)1​
因此
rm(x,y)=−∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)=y−11+e−fm−1(x)=y−y^\begin{aligned} r_m(x,y) &= -\frac{\partial L(y,f(x))}{\partial f(x)}\Bigg|_{f(x)=f_{m-1}(x)}\\ &= y - \frac1{1+e^{-f_{m-1}(x)}}\\ &= y - \hat y \end{aligned} rm​(x,y)​=−∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​=y−1+e−fm−1​(x)1​=y−y^​​
所以,rmi=yi−y^m−1,ir_{mi} = y_i - \hat y_{m-1,i}rmi​=yi​−y^​m−1,i​。

用 Tm={(x1,rm1),(x2,rm2),⋯,(xN,rmN)}T_m = \{(x_1,r_{m1}),(x_2,r_{m2}),\cdots,(x_N,r_{mN})\}Tm​={(x1​,rm1​),(x2​,rm2​),⋯,(xN​,rmN​)} 作为训练集训练第 mmm 轮基树。

5.1 计算步骤

(1)初始化一棵仅包含根节点的树,并寻找到一个常数 Const 能够使损失函数达到极小值:
f0(x)=arg⁡min⁡c∑i=1NL(yi,c)f_0(x) = \arg\min_c\sum_{i=1}^NL(y_i,c) f0​(x)=argcmin​i=1∑N​L(yi​,c)
(2)计算损失函数的负梯度值,用作残差的估计值,即:
rm(x,y)=−∂L(y,f(x))∂f(x)∣f(x)=fm−1(x)=y−11+e−fm−1(x)=y−y^\begin{aligned} r_m(x,y) &= -\frac{\partial L(y,f(x))}{\partial f(x)}\Bigg|_{f(x)=f_{m-1}(x)}\\ &= y - \frac1{1+e^{-f_{m-1}(x)}}\\ &= y - \hat y \end{aligned} rm​(x,y)​=−∂f(x)∂L(y,f(x))​​f(x)=fm−1​(x)​=y−1+e−fm−1​(x)1​=y−y^​​

如果使用对数似然损失函数 L=∑i=1Nlog⁡(1+e−yif(xi))L = \sum_{i=1}^N\log(1+e^{-y_if(x_i)})L=∑i=1N​log(1+e−yi​f(xi​)),则:
rmi(x,y)=yi1+e−yif(xi).r_{mi}(x,y) = \frac{y_i}{1+e^{-y_if(x_i)}}. rmi​(x,y)=1+e−yi​f(xi​)yi​​.

(3)利用数据集 (xi,rmi)​(x_i,r_{mi})​(xi​,rmi​)​ 拟合下一轮基础模型:
fm(x)=∑j=1JcmjI(xi∈Rmj)f_m(x) = \sum_{j=1}^Jc_{mj}I(x_i\in R_{mj}) fm​(x)=j=1∑J​cmj​I(xi​∈Rmj​)
其中,cmj=arg⁡min⁡c∑xi∈Rmjlog⁡(1+e−fm(xi))+(1−y)fm(xi)c_{mj} = \arg\min_c\sum_{x_i\in R_{mj}}\log(1+e^{-f_m(x_i)}) + (1-y)f_m(x_i)cmj​=argminc​∑xi​∈Rmj​​log(1+e−fm​(xi​))+(1−y)fm​(xi​)

(4)重复(2)和(3),并利用 mmm 个基础模型,构建梯度提升模型:
fM(x)=fM−1(x)+fm(x)=∑m=1M∑j=1JcmjI(xi∈Rmj)\begin{aligned} f_M(x) &= f_{M-1}(x) + f_m(x)\\ &=\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x_i\in R_{mj}) \end{aligned} fM​(x)​=fM−1​(x)+fm​(x)=m=1∑M​j=1∑J​cmj​I(xi​∈Rmj​)​

相关内容

热门资讯

最绚丽的安卓系统,最绚丽版本全... 哇,你知道吗?在安卓的世界里,有一款系统,它就像是一颗璀璨的明珠,闪耀着最绚丽的色彩。它就是——最绚...
小米系统安卓通知权限,深度解析... 亲爱的手机控们,你是否曾为手机通知栏里乱糟糟的信息而烦恼?又或者,你是否好奇过,为什么有些应用总是能...
安卓7.0系统能玩吗,体验全新... 你有没有想过,你的安卓手机升级到7.0系统后,那些曾经陪伴你度过无数时光的游戏,还能不能继续畅玩呢?...
平板安卓系统哪家好,安卓平板系... 你有没有想过,在这个科技飞速发展的时代,拥有一台性能出色的平板电脑是多么重要的事情呢?想象无论是追剧...
安卓好的点歌系统,打造个性化音... 你有没有想过,在安卓手机上,点歌系统竟然也能如此精彩?没错,就是那个我们每天都会用到,却又常常忽略的...
熊猫安卓系统直播软件,解锁互动... 你知道吗?最近有个超级酷炫的直播软件在熊猫迷们中间火得一塌糊涂!它就是熊猫安卓系统直播软件。别看它名...
安卓点播系统开发,Androi... 你有没有想过,手机里那些让你爱不释手的视频,其实背后有着一套复杂的安卓点播系统在默默支撑呢?今天,就...
安卓6.0系统加权限,深度解析... 你有没有发现,自从手机升级到安卓6.0系统后,权限管理变得超级严格呢?这可真是让人又爱又恨啊!今天,...
哪些电视带安卓系统,多款热门智... 你有没有想过,家里的电视竟然也能装上安卓系统?听起来是不是有点不可思议?没错,现在市面上就有不少电视...
苹果怎么运用安卓系统,揭秘如何... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是苹果竟然开始运用安卓系统了!是不是觉得有点不可思议...
安卓系统能转什么系统好,探索最... 你有没有想过,你的安卓手机是不是也能换换口味,体验一下其他系统的魅力呢?没错,今天就来聊聊这个话题:...
龙之狂热安卓系统,释放龙族狂热 亲爱的手机控们,你是否曾为拥有一款独特的安卓系统而疯狂?今天,就让我带你走进一个充满奇幻色彩的龙之狂...
vivo手机安卓系统怎么升级系... 亲爱的手机控们,你是不是也和我一样,对手机的新功能充满期待呢?尤其是vivo手机的用户,是不是也在想...
鸿蒙2.0退回安卓系统,一场系... 你知道吗?最近科技圈里可是炸开了锅,因为华为的鸿蒙2.0操作系统竟然要退回安卓系统了!这可不是一个简...
安卓系统怎么复制卡,安卓系统卡... 你有没有遇到过这种情况:手机里的照片、视频或者重要文件,突然想备份到电脑上,却发现安卓系统的卡复制功...
app兼容低安卓系统,打造全民... 你有没有发现,现在手机APP更新换代的速度简直就像坐上了火箭!不过,你知道吗?有些APP可是特别贴心...
中间安卓系统叫什么,中间安卓系... 你有没有想过,安卓系统里竟然还有一个中间的版本?没错,就是那个让很多手机用户既熟悉又陌生的版本。今天...
安卓怎么用os系统,利用And... 你有没有想过,你的安卓手机其实可以变身成一个功能强大的操作系统呢?没错,就是那个我们平时在电脑上使用...
pe系统安卓能做么,探索安卓平... 亲爱的读者,你是否曾好奇过,那款在安卓设备上大受欢迎的PE系统,它究竟能做什么呢?今天,就让我带你一...
安卓 打印机系统,安卓打印机系... 你有没有想过,家里的安卓手机和打印机之间竟然能建立起如此紧密的联系?没错,就是那个安卓打印机系统!今...