GBDT分类树理论推导--全网最详细理论推导

参考:

  • https://zhuanlan.zhihu.com/p/47185756
  • https://zhuanlan.zhihu.com/p/494536555
  • https://zhuanlan.zhihu.com/p/465921554
  • https://zhuanlan.zhihu.com/p/91652813
  • https://zhuanlan.zhihu.com/p/89614607

GBDT用于分类的时候,并不是(像随机森林)用Gini或者熵的方式划分特征空间实现分类,由于需要拟合残差,GBDT实际上是在学习样本在每个类别上的得分

二分类

情况1 y ∈ { − 1 , 1 } y \in \left \{-1,1\right \} y{11}

在论文【Friedman J H. Greedy function approximation: a gradient boosting machine[J]. Annals of statistics, 2001: 1189-1232.】中二分类 y ∈ { − 1 , 1 } y \in \left \{-1,1\right \} y{11},则损失函数的表达式为 L ( y , F ) = log ⁡ ( 1 + exp ⁡ ( − 2 y F ) ) ( 系数 2 是作者自己加上去的 ) L(y, F)=\log (1+\exp (-2 y F))(系数2是作者自己加上去的) L(y,F)=log(1+exp(2yF))(系数2是作者自己加上去的)

对数损失函数

  1. 对数损失函数的标准形式: L ( Y , P ( Y = y ∣ x ) ) = − log ⁡ P ( Y = y ∣ x ) L(Y, P(Y=y \mid x))=-\log P(Y=y \mid x) L(Y,P(Y=yx))=logP(Y=yx)

  2. 逻辑回归 P ( Y = y ∣ x ) P(Y=y \mid x) P(Y=yx)表达式:

    1. 当y=1时: P ( Y = y ∣ x ) = h θ ( x ) = g ( f ( x ) ) = 1 1 + e − f ( x ) P(Y=y \mid x)=h_\theta(x)=g(f(x))=\frac{1}{1+e^{-f(x)}} P(Y=yx)=hθ(x)=g(f(x))=1+ef(x)1
    2. 当y=-1时: P ( Y = y ∣ x ) = 1 − h θ ( x ) = 1 − g ( f ( x ) ) = 1 − 1 1 + e − f ( x ) = e − f ( x ) 1 + e − f ( x ) = 1 1 + e f ( x ) P(Y=y \mid x)=1-h_\theta(x)=1-g(f(x))=1-\frac{1}{1+e^{-f(x)}}=\frac{e^{-f(x)}}{1+e^{-f(x)}}=\frac{1}{1+e^{f(x)}} P(Y=yx)=1hθ(x)=1g(f(x))=11+ef(x)1=1+ef(x)ef(x)=1+ef(x)1
  3. 将它带入到对数损失函数的标准形式,通过推导可以得到logistic的损失函数表达式如下:

    L ( Y , P ( Y = y ∣ x ) ) = { − log ⁡ ( 1 1 + e − f ( x ) ) y = 1 − log ⁡ ( 1 1 + e f ( x ) ) y = − 1 L(Y, P(Y=y \mid x))= \begin{cases}-\log \left(\frac{1}{1+e^{-f(x)}}\right) & y=1 \\ -\log \left(\frac{1}{1+e^{f(x)}}\right) & y=-1\end{cases} L(Y,P(Y=yx))= log(1+ef(x)1)log(1+ef(x)1)y=1y=1

    等价于

    L ( Y , P ( Y = y ∣ x ) ) = { log ⁡ ( 1 + e − f ( x ) ) y = 1 log ⁡ ( 1 + e f ( x ) ) y = − 1 L(Y, P(Y=y \mid x))= \begin{cases}\log (1+e^{-f(x)}) & y=1 \\ \log (1+e^{f(x)}) & y=-1\end{cases} L(Y,P(Y=yx))={log(1+ef(x))log(1+ef(x))y=1y=1

  4. 当分的两类为 {1,−1} 时,逻辑回归的表达式 P ( Y = y ∣ x ) P(Y=y \mid x) P(Y=yx)可以合并如下

    P ( Y = y ∣ x ) = 1 1 + e − y f ( x ) P(Y=y \mid x)=\frac{1}{1+e^{-y f(x)}} P(Y=yx)=1+eyf(x)1

    将它带入到对数损失函数的标准形式,通过推导可以得到logistic的损失函数表达式如下:

    L ( Y , P ( Y = y ∣ x ) ) = log ⁡ ( 1 + e − y f ( x ) ) L(Y, P(Y=y \mid x))=\log \left(1+e^{-y f(x)}\right) L(Y,P(Y=yx))=log(1+eyf(x))

  5. y ∈ Y = { 0 , 1 } y \in Y=\{0,1\} yY={0,1} ,则逻辑回归最后得到的目标式子如下:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1}{m}\sum_{i=1}^m\left[ y^{(i)} \log h_\theta\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_\theta\left(x^{(i)}\right)\right)\right] J(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

残差可以表示为
r m i = − ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ∣ F ( x i ) = F m − 1 ( x i ) = 2 y i 1 + exp ⁡ ( 2 y i F m − 1 ( x i ) ) r_{mi}=-\left.\frac{\partial L\left(y_i, F\left(x_i\right)\right)}{\partial F\left(x_i\right)}\right|_{F\left(x_i\right)=F_{m-1}\left(x_i\right)}=\frac{2 y_i}{1+\exp \left(2 y_i F_{m-1}\left(x_i\right)\right)} rmi=F(xi)L(yi,F(xi)) F(xi)=Fm1(xi)=1+exp(2yiFm1(xi))2yi

推导:

∵ L ( y , F ) = log ⁡ ( 1 + exp ⁡ ( − 2 y F ) ) ∴ ∂ L ( y i , F ( x i ) ∂ F ( x i ) = exp ⁡ ( − 2 y i F ( x i ) ) ( − 2 y i ) 1 + exp ⁡ ( − 2 y i F ( x i ) ) = ( − 2 y i ) [ 1 − 1 1 + exp ⁡ ( − 2 y i F ( x i ) ) ] = − 2 y i + 2 y i ⋅ 1 1 + exp ⁡ ( − 2 y i F ( x i ) ) ∂ 2 L ( y i , F ( x i ) ) ∂ F 2 ( x i ) = 2 y i 1 1 + exp ⁡ ( − 2 y i F ( x i ) ) ⋅ exp ⁡ ( − 2 y i F ( x i ) ) 1 + exp ⁡ ( − 2 y i F ( x i ) ) ⋅ ( 2 y i ) ( 注意:把 2 y i F ( x i ) 整体看成 1 1 + e − x 的 x )  而  r m i = − ∂ L ( y i , F ( x i ) ) ∂ F ( x i ) ∣ F ( x i ) = F m − 1 ( x i ) = 2 y i [ 1 1 + exp ⁡ ( − 2 y i F m − 1 ( x i ) ) − 1 ] = ( 2 y i ) exp ⁡ ( − 2 y i F m − 1 ( x i ) ) 1 + exp ⁡ ( − 2 y i F m − 1 ( x i ) ) = ( 2 y i ) 1 exp ⁡ ( 2 y i F m − 1 ( x i ) ) + 1 \begin{aligned} & \because L(y, F)=\log (1+\exp (-2 y F)) \\ & \therefore \frac{\partial L\left(y_i, F\left(x_i\right)\right.}{\partial F\left(x_i\right)}=\frac{\exp \left(-2 y_i F\left(x_i\right)\right)\left(-2 y_i\right)}{1+\exp \left(-2 y_i F\left(x_i\right)\right)}=\left(-2 y_i\right)\left[1-\frac{1}{1+\exp \left(-2 y_i F(x_i)\right)}\right] \\ & =-2 y_i+2 y_i \cdot \frac{1}{1+\exp \left(-2 y_i F\left(x_i\right))\right.} \\ & \frac{\partial^2 L\left(y_i, F\left(x_i\right)\right)}{\partial F^2\left(x_i\right)}=2 y_i \frac{1}{1+\exp \left(-2 y_i F\left(x_i\right)\right)} \cdot \frac{\exp \left(-2 y_i F\left(x_i\right)\right)}{1+\exp \left(-2 y_i F\left(x_i\right)\right)} \cdot\left(2 y_i\right) (注意:把2y_iF(x_i)整体看成\frac{1}{1+e^{-x}}的x) \\ & \text { 而 } r_{m i}=-\left.\frac{\partial L\left(y_i, F\left(x_i\right)\right)}{\partial F_{\left(x_i\right)}}\right|_{F_{\left(x_i\right)}= F_{m-1}\left(x_i\right)}=2 y_i\left[\frac{1}{1+\exp \left(-2 y_i F_{m-1}\left(x_i\right)\right.)}-1\right] \\ & =(2 y_i) \frac{\exp \left(-2 y_i F_{m-1}\left(x_i\right)\right)}{1+\exp \left(-2 y_i F_{m-1}{\left(x_i\right)}\right)}=(2 y_i) \frac{1}{\left.\exp \left(2 y_i F_{m-1}{(} x_i\right)\right)+1} \\ & \end{aligned} L(y,F)=log(1+exp(2yF))F(xi)L(yi,F(xi)=1+exp(2yiF(xi))exp(2yiF(xi))(2yi)=(2yi)[11+exp(2yiF(xi))1]=2yi+2yi1+exp(2yiF(xi))1F2(xi)2L(yi,F(xi))=2yi1+exp(2yiF(xi))11+exp(2yiF(xi))exp(2yiF(xi))(2yi)(注意:把2yiF(xi)整体看成1+ex1x)  rmi=F(xi)L(yi,F(xi)) F(xi)=Fm1(xi)=2yi[1+exp(2yiFm1(xi))11]=(2yi)1+exp(2yiFm1(xi))exp(2yiFm1(xi))=(2yi)exp(2yiFm1(xi))+11

微信图片_20231122231956

而 γ l m = arg ⁡ min ⁡ ρ ∑ i = 1 N log ⁡ ( 1 + exp ⁡ ( − 2 y i ( F m − 1 ( x i ) + γ l m I ( x i ∈ R j m ) ) ) ( 拆分到各个叶子节点) = arg ⁡ min ⁡ γ ∑ x i ∈ R j m log ⁡ ( 1 + exp ⁡ ( − 2 y i ( F m − 1 ( x i ) + γ l m I ( x i ∈ R j m ) ) ) 而\gamma_{l m}=\arg \min _\rho \sum_{i=1}^N \log \left(1+\exp \left(-2 y_i\left(F_{m-1}\left(\mathbf{x}_i\right)+\gamma_{lm}I(x_i\in R_{jm}\right)\right)\right)\\ (拆分到各个叶子节点)=\arg \min _\gamma \sum_{\mathbf{x}_i \in R_{j m}} \log \left(1+\exp \left(-2 y_i\left(F_{m-1}\left(\mathbf{x}_i\right)+\gamma_{lm}I(x_i\in R_{jm}\right)\right)\right) γlm=argminρi=1Nlog(1+exp(2yi(Fm1(xi)+γlmI(xiRjm)))(拆分到各个叶子节点)=argminγxiRjmlog(1+exp(2yi(Fm1(xi)+γlmI(xiRjm)))
γ l m ∗ = γ l m I ( x i ∈ R j m ) = arg ⁡ min ⁡ γ ∑ x i ∈ R l m log ⁡ ( 1 + exp ⁡ ( − 2 y i ( F m − 1 ( x i ) + γ ) ) ) = argmin ⁡ γ ∑ x i ∈ R j m L ( y i , F m − 1 ( x i ) + γ ) ( 注:在 F m − 1 ( x i ) 处泰勒展开 ) = a r g m i n ∑ x i ∈ R j m L ( y i , F m − 1 ( x i ) ) + ∂ L ( y i , F m − 1 ( x i ) ) γ + 1 2 ∂ 2 L ( y i , F m − 1 ( x i ) ) γ 2 \gamma_{lm}^*=\gamma_{l m} I(x_i \in R_{jm})=\arg \min _\gamma \sum_{\mathbf{x}_i \in R_{l m}} \log \left(1+\exp \left(-2 y_i\left(F_{m-1}\left(\mathbf{x}_i\right)+\gamma\right)\right)\right)\\ =\operatorname{argmin}_\gamma \sum_{x_i \in R_{j m}} L(y_i, F_{m-1}(x_i)+\gamma)(注:在F_{m-1}(x_i)处泰勒展开)\\=argmin\sum_{x_i \in R_{j m}} L\left(y_i, F_{m-1}\left(x_i\right)\right)+\partial L\left(y_i, F_{m-1}\left(x_i\right)\right) \gamma+\frac{1}{2} \partial^2 L\left(y_i, F_{m-1}\left(x_i\right)\right) \gamma^2 γlm=γlmI(xiRjm)=argminγxiRlmlog(1+exp(2yi(Fm1(xi)+γ)))=argminγxiRjmL(yi,Fm1(xi)+γ)(注:在Fm1(xi)处泰勒展开)=argminxiRjmL(yi,Fm1(xi))+L(yi,Fm1(xi))γ+212L(yi,Fm1(xi))γ2

$\gamma_{lm}^* =【注意:-\frac{b}{2a}】-\frac{\sum_{x_i \in R_{j m}} \partial L\left(y_i, F_{m-1}(x_i)\right)}{\sum_{x_i \in R_{j m}} \partial^2 L\left(y_i, F_{m-1}(x_i)\right)}=\frac{\sum_{x_i \in R_{j m}} r_{mi}}{\sum_{x_i \in R_{j m}}\left|r_{mi}\right|\left|2-r_{mi}\right|} $(证明过程见上面图片)

伪代码

注: F 0 ( x ) = 1 2 P ( Y = 1 ∣ X ) P ( Y = − 1 ∣ X ) ( 论文中对 y ˉ 未详细解释 ) F_0(x)=\frac{1}{2}\frac{P(Y=1|X)}{P(Y=-1|X)}(论文中对\bar{y}未详细解释) F0(x)=21P(Y=1∣X)P(Y=1∣X)(论文中对yˉ未详细解释)

v2-42ab959ebccef1e34815c922a3848013_1440w

情况2 y ∈ { 0 , 1 } y \in \left \{0,1\right \} y{01}

单个样本的损失函数 J ( θ ) = y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) J(\theta)= y_i \log h_\theta\left(x_i\right)+\left(1-y_i\right) \log \left(1-h_\theta\left(x_i\right)\right) J(θ)=yiloghθ(xi)+(1yi)log(1hθ(xi))

对于GBDT二分类来说,其单个样本的损失函数为 L ( y i , F ( x i ) ) = − [ y i l o g ( 1 1 + e − F ( x i ) ) + ( 1 − y i ) l o g ( 1 − 1 1 + e − F ( x i ) ) ] = y i l o g ( 1 + e − F ( x i ) ) − ( 1 − y i ) l o g ( e − F ( x i ) 1 + e − F ( x i ) ) = y i log ⁡ ( 1 + e − F ( x i ) ) + ( 1 − y i ) [ F ( x i ) + log ⁡ ( 1 + e − F ( x i ) ) ] L\left(y_i, F\left(x_i\right)\right)=-[y_ilog(\frac{1}{1+e^{-F(x_i)}})+(1-y_i)log(1-\frac{1}{1+e^{-F(x_i)}})]\\ =y_ilog(1+e^{-F(x_i)})-(1-y_i)log(\frac{e^{-F(x_i)}}{1+e^{-F(x_i)}})\\=y_i \log \left(1+e^{-F\left(x_i\right)}\right)+\left(1-y_i\right)\left[F\left(x_i\right)+\log \left(1+e^{-F\left(x_i\right)}\right)\right] L(yi,F(xi))=[yilog(1+eF(xi)1)+(1yi)log(11+eF(xi)1)]=yilog(1+eF(xi))(1yi)log(1+eF(xi)eF(xi))=yilog(1+eF(xi))+(1yi)[F(xi)+log(1+eF(xi))]

  • step1: 初始化第一个弱分类器 F 0 ( x ) = l o g ( P ( Y = 1 ∣ x ) 1 − P ( Y = 1 ∣ x ) ) F_0(x)=log(\frac{P(Y=1|x)}{1-P(Y=1|x)}) F0(x)=log(1P(Y=1∣x)P(Y=1∣x))

证明:

微信图片_20231123003859

其中, P ( Y = 1 ∣ x ) P(Y=1|x) P(Y=1∣x)是训练样本中 y=1 的比例,利用先验信息来初始化学习器。

  • step2:建立M棵分类回归树

    • 对于建立第m棵树时,对于样本i=1,2,…,N, 计算第m棵树对应的负梯度 r m i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) = y i − 1 1 + e − F ( x i ) r_{m i}=-\left[\frac{\partial L\left(y_i, F\left(x_i\right)\right)}{\partial F(x)}\right]_{F(x)=F_{m-1}(x)}=y_i-\frac{1}{1+e^{-F\left(x_i\right)}} rmi=[F(x)L(yi,F(xi))]F(x)=Fm1(x)=yi1+eF(xi)1

    证明:

    微信图片_20231123005408

    • 对于i=1,2,…,N ,利用CART回归树拟合数据 ( x i , r m , i ) (x_i, r_{m,i}) (xi,rm,i) ,得到第 m 棵回归树,其对应的叶子节点区域为 R m , j R_{m,j} Rm,j,其中 j=1,2,…, J m J_m Jm ,且 J m J_m Jm 为第m棵回归树叶子节点的个数。

    • 对于 J m J_m Jm 个叶子节点区域 j=1,2,…, J m J_m Jm,计算出最佳拟合值: c m , j = ∑ x i ∈ R m , j r m , i ∑ x i ∈ R m , j ( y i − r m , i ) ( 1 − y i + r m , i ) c_{m, j}=\frac{\sum_{x_i \in R_{m, j}} r_{m, i}}{\sum_{x_i \in R_{m, j}}\left(y_i-r_{m, i}\right)\left(1-y_i+r_{m, i}\right)} cm,j=xiRm,j(yirm,i)(1yi+rm,i)xiRm,jrm,i

      证明:

      补充近似值代替过程(用牛顿法迭代来求解):
      假设仅有一个样本: L ( y i , F ( x ) ) = − ( y i ln ⁡ 1 1 + e − F ( x ) + ( 1 − y i ) ln ⁡ ( 1 − 1 1 + e − F ( x ) ) ) L\left(y_i, F(x)\right)=-\left(y_i \ln \frac{1}{1+e^{-F(x)}}+\left(1-y_i\right) \ln \left(1-\frac{1}{1+e^{-F(x)}}\right)\right) L(yi,F(x))=(yiln1+eF(x)1+(1yi)ln(11+eF(x)1))

      P i = 1 1 + e − F ( x ) P_i=\frac{1}{1+e^{-F(x)}} Pi=1+eF(x)1 ,则 ∂ P i ∂ F ( x ) = P i ( 1 − P i ) ( S i g m o i d 激活函数求导) = − [ y i l o g p i + ( 1 − y i ) l o g ( 1 − p i ) ) ] \frac{\partial P_i}{\partial F(x)}=P_i\left(1-P_i\right)(Sigmoid激活函数求导)=-[y_ilogp_i+(1-y_i)log(1-p_i))] F(x)Pi=Pi(1Pi)Sigmoid激活函数求导)=[yilogpi+(1yi)log(1pi))]

      求一阶导:
      ∂ L ( y i , F ( x ) ) ∂ F ( x ) = ∂ L ( y i , F ( x ) ) ∂ P i ⋅ ∂ P i ∂ F ( x ) = − ( y i P i − 1 − y i 1 − P i ) ⋅ ( P i ⋅ ( 1 − P i ) ) = P i − y i \begin{aligned} \frac{\partial L\left(y_i, F(x)\right)}{\partial F(x)} & =\frac{\partial L\left(y_i, F(x)\right)}{\partial P_i} \cdot \frac{\partial P_i}{\partial F(x)} \\ & =-\left(\frac{y_i}{P_i}-\frac{1-y_i}{1-P_i}\right) \cdot\left(P_i \cdot\left(1-P_i\right)\right) \\ & =P_i-y_i \end{aligned} F(x)L(yi,F(x))=PiL(yi,F(x))F(x)Pi=(Piyi1Pi1yi)(Pi(1Pi))=Piyi

      求二阶导:
      ∂ 2 L ( y i , F ( x ) ) ∂ F ( x ) 2 = ( P i − y i ) ′ = P i ( 1 − P i ) \begin{aligned} \frac{\partial^2 L\left(y_i, F(x)\right)}{\partial F(x)^2} & =\left(P_i-y_i\right)^{\prime} \\ & =P_i\left(1-P_i\right) \end{aligned} F(x)22L(yi,F(x))=(Piyi)=Pi(1Pi)

      对于 L ( y i , F ( x ) + c ) L\left(y_i, F(x)+c\right) L(yi,F(x)+c) 的泰勒二阶展开式( c = a r g m i n c L ( y i , F ( x ) + c ) c=argmin_cL\left(y_i, F(x)+c\right) c=argmincL(yi,F(x)+c)):
      L ( y i , F ( x ) + c ) = L ( y i , F ( x ) ) + ∂ L ( y i , F ( x ) ) ∂ F ( x ) ⋅ c + 1 2 ∂ 2 L ( y i , F ( x ) ) ∂ F ( x ) 2 c 2 L\left(y_i, F(x)+c\right)=L\left(y_i, F(x)\right)+\frac{\partial L\left(y_i, F(x)\right)}{\partial F(x)} \cdot c+\frac{1}{2} \frac{\partial^2 L\left(y_i, F(x)\right)}{\partial F(x)^2} c^2 L(yi,F(x)+c)=L(yi,F(x))+F(x)L(yi,F(x))c+21F(x)22L(yi,F(x))c2
      L ( y i , F ( x ) + c ) L\left(y_i, F(x)+c\right) L(yi,F(x)+c) 取极值时,上述二阶表达式中的c为:
      c = − b 2 a = − ∂ L ( y i , F ( x ) ) ∂ F ( x ) 2 ( 1 2 ∂ 2 L ( y i , F ( x ) ) ∂ F ( x ) 2 ) = − ∂ L ( y i , F ( x ) ) ∂ F ( x ) ∂ 2 L ( y i , F ( x ) ) ∂ F ( x ) 2 ) ⇒  一阶、二阶导代入  y i − P i P i ( 1 − P i ) ⇒ r m i = y i − P i r m i ( y i − r m i ) ( 1 − y i + r m i ) \begin{aligned} c & =-\frac{b}{2 a}=-\frac{\frac{\partial L\left(y_i, F(x)\right)}{\partial F(x)}}{2\left(\frac{1}{2} \frac{\partial^2 L\left(y_i, F(x)\right)}{\partial F(x)^2}\right)} \\ & =-\frac{\frac{\partial L\left(y_i, F(x)\right)}{\partial F(x)}}{\left.\frac{\partial^2 L\left(y_i, F(x)\right)}{\partial F(x)^2}\right)} \stackrel{\text { 一阶、二阶导代入 }}{\Rightarrow} \frac{y_i-P_i}{P_i\left(1-P_i\right)} \\ & \stackrel{r_{mi}=y_i-P_i}{\Rightarrow} \frac{r_{mi}}{(y_i-r_{mi})\left(1-y_i+r_{mi}\right)} \end{aligned} c=2ab=2(21F(x)22L(yi,F(x)))F(x)L(yi,F(x))=F(x)22L(yi,F(x)))F(x)L(yi,F(x)) 一阶、二阶导代入 Pi(1Pi)yiPirmi=yiPi(yirmi)(1yi+rmi)rmi
      最后再在一阶导和二阶导求解时加上 ∑ x i ∈ R m , j \sum_{x_i \in R_{m,j}} xiRm,j,得到上式结果

    • 更新强学习器 F m ( x ) F_m(x) Fm(x) :
      F m ( x ) = F m − 1 ( x ) + ∑ j = 1 J m c m , j I ( x ∈ R m , j ) F_m(x)=F_{m-1}(x)+\sum_{j=1}^{J_m} c_{m, j} I\left(x \in R_{m, j}\right) Fm(x)=Fm1(x)+j=1Jmcm,jI(xRm,j)

  • step3:得到最终的强学习器 F M ( x ) F_M(x) FM(x) 的表达式:
    F M ( x ) = F 0 ( x ) + ∑ m = 1 M ∑ j = 1 J m c m , j I ( x ∈ R m , j ) F_M(x)=F_0(x)+\sum_{m=1}^M \sum_{j=1}^{J_m} c_{m, j} I\left(x \in R_{m, j}\right) FM(x)=F0(x)+m=1Mj=1Jmcm,jI(xRm,j)

GBDT二分类算法实例

训练集如下表所示,一组数据的特征有年龄和体重,把身高大于1.5米作为分类边界,身高大于1.5米的令标签为1,身高小于等于1.5米的令标签为0,共有4组数据。

v2-f985b918beb9465e1f1d63d4df26653d_r

测试数据如下表所示,只有一组数据,年龄为25、体重为65,我们用在训练集上训练好的GBDT模型预测该组数据的身高是否大于1.5米?

v2-b86998f87dd21433d45247347081b561_1440w

模型训练阶段

参数设置:

  • 学习率learning_rate = 0.1
  • 迭代次数:n_trees = 5
  • 树的深度:max_depth = 3

算法流程:

  1. 初始化弱学习器:

    F 0 ( x ) = log ⁡ P ( Y = 1 ∣ x ) 1 − P ( Y = 1 ∣ x ) = log ⁡ 2 2 = 0 F_0(x)=\log \frac{P(Y=1 \mid x)}{1-P(Y=1 \mid x)}=\log \frac{2}{2}=0 F0(x)=log1P(Y=1x)P(Y=1x)=log22=0

  2. 建立M棵回归树(m=1,2,…,M):

    1. 计算负梯度 r m , i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x ) ] F ( x ) = F m − 1 ( x ) = y i − 1 1 + e − F ( x i ) r_{m, i}=-\left[\frac{\partial L\left(y_i, F\left(x_i\right)\right)}{\partial F(x)}\right]_{F(x)=F_{m-1}(x)}=y_i-\frac{1}{1+e^{-F\left(x_i\right)}} rm,i=[F(x)L(yi,F(xi))]F(x)=Fm1(x)=yi1+eF(xi)1

      最后的计算结果如下:

      v2-5f8b01323172e9186389745dba59cfba_1440w

      此时将残差作为样本的标签来训练弱学习器 F 1 ( x ) F_1(x) F1(x),即下表数据:

      v2-3665bd298d997938eeae08de504962a2_1440w

接着寻找回归树的最佳划分节点,遍历每个特征的每个可能取值。从年龄特征值为5开始,到体重特征为70结束,分别计算分裂后两组数据的平方损失(Square Error), S S E L SSE_L SSEL为左节点的平方损失, S S E R SSE_R SSER为右节点的平方损失,找到使平方损失和$SSE_{sum}=SSE_L+SSE_R $最小的那个划分节点,即为最佳划分节点。

例如:以年龄7为划分节点,将小于7的样本划分为到左节点,大于等于7的样本划分为右节点。左节点包括 x 0 x_0 x0,右节点包括样本$x_1,x_2,x_3, SSE_L=0, SSE_R=0.667,SSE_{sum}=0.667 $,所有可能的划分情况如下表所示:

v2-1a902785ce01139828a3449e8b8f7993_1440w

以上划分点的总平方损失最小为0.000,有两个划分点:年龄21和体重60,所以随机选一个作为划分点,这里我们选年龄21。现在我们的第一棵树长这个样子:

v2-46ec3591fbaafaa1ce80ae66501e9296_1440w

我们设置的参数中树的深度max_depth=3,现在树的深度只有2,需要再进行一次划分,这次划分要对左右两个节点分别进行划分,但是我们在生成树的时候,设置了三个树继续生长的条件:

  • 深度没有到达最大。树的深度设置为3,意思是需要生长成3层。
  • 点样本数 >= min_samples_split
  • *此节点上的样本的标签值不一样(如果值一样说明已经划分得很好了,不需要再分)(本程序满足这个条件,因此树只有2层)*

最终我们的第一棵回归树长下面这个样子:

此时我们的树满足了设置,还需要做一件事情,给这棵树的每个叶子节点分别赋一个参数 c m , j c_{m,j} cm,j,来拟合残差。

c 1 , j = ∑ x i ∈ R 1 , j r 1 , i ∑ x i ∈ R 1 , j ( y i − r 1 , i ) ( 1 − y i + r 1 , i ) c_{1, j}=\frac{\sum_{x_i \in R_{1, j}} r_{1, i}}{\sum_{x_i \in R_{1, j}}\left(y_i-r_{1, i}\right)\left(1-y_i+r_{1, i}\right)} c1,j=xiR1,j(yir1,i)(1yi+r1,i)xiR1,jr1,i

根据上述划分结果,为了方便表示,规定从左到右为第1,2个叶子结点,其计算值过程如下:

( x 0 , x 1 ∈ R 1 , 1 ) , c 1 , 1 = − 0.5 − 0.5 [ ( 0 − ( − 0.5 ) ) ∗ ( 1 − 0 + ( − 0.5 ) ) ] ∗ 2 = − 2.0 ( x 2 , x 3 ∈ R 1 , 2 ) , c 1 , 2 = 2.0 \begin{array}{ll}\left(x_0, x_1 \in R_{1,1}\right), & c_{1,1}=\frac{-0.5-0.5}{[(0-(-0.5))*(1-0+(-0.5))]*2}=-2.0 \\ \left(x_2, x_3 \in R_{1,2}\right), & c_{1,2}=2.0\end{array} (x0,x1R1,1),(x2,x3R1,2),c1,1=[(0(0.5))(10+(0.5))]20.50.5=2.0c1,2=2.0

此时的第一棵树长下面这个样子:

v2-6306341d6ef4848a017c03d8496ed6b6_1440w

接着更新强学习器,需要用到学习率(这是Shrinkage的思想,如果每次都全部加上拟合值 ,即学习率为1,很容易一步学到位导致GBDT过拟合):learning_rate=0.1,用lr表示。更新公式为:

F 1 ( x ) = F 0 ( x ) + l r ∗ ∑ j = 1 2 c 1 , j I ( x ∈ R 1 , j ) F_1(x)=F_0(x)+l r * \sum_{j=1}^2 c_{1, j} I\left(x \in R_{1, j}\right) F1(x)=F0(x)+lrj=12c1,jI(xR1,j)

  1. **重复此步骤,直到m>5结束,最后生成5棵树强学习器 F 5 ( x ) = F 0 ( x ) + l r ∗ ∑ m = 1 5 ∑ j = 1 2 c m , j I ( x ∈ R m , j ) F_5(x)=F_0(x)+lr * \sum_{m=1}^5 \sum_{j=1}^2 c_{m, j} I\left(x \in R_{m, j}\right) F5(x)=F0(x)+lrm=15j=12cm,jI(xRm,j)

第一棵树

第二棵树

  • 上一轮得到的 F 1 ( x ) = F 0 ( x ) + l r ∗ ∑ j = 1 2 c 1 , j I ( x ∈ R 1 , j ) F_1(x)=F_0(x)+l r * \sum_{j=1}^2 c_{1, j} I\left(x \in R_{1, j}\right) F1(x)=F0(x)+lrj=12c1,jI(xR1,j)

R 1 , 1 : F 1 ( x ) = F 0 ( x ) + 0.1 ∗ c 1 , 1 = − 0.2 R 1 , 2 : F 1 ( x ) = F 0 ( x ) + 0.1 ∗ c 1 , 2 = 0.2 R_{1,1}:F_1(x)=F_0(x)+0.1*c_{1,1}=-0.2\\R_{1,2}:F_1(x)=F_0(x)+0.1*c_{1,2}=0.2 R1,1:F1(x)=F0(x)+0.1c1,1=0.2R1,2:F1(x)=F0(x)+0.1c1,2=0.2

  • 计算负梯度 r m , i = − [ ∂ L ( y i , F ( x i ) ) ∂ F ( x ) ] F ( x ) = F 1 ( x ) = y i − 1 1 + e − F 1 ( x i ) r_{m, i}=-\left[\frac{\partial L\left(y_i, F\left(x_i\right)\right)}{\partial F(x)}\right]_{F(x)=F_{1}(x)}=y_i-\frac{1}{1+e^{-F_1\left(x_i\right)}} rm,i=[F(x)L(yi,F(xi))]F(x)=F1(x)=yi1+eF1(xi)1

R 2 , 1 : r 1 , i = 0 − 1 1 + e 0.2 = − 1 1 + e 0.2 R 2 , 2 : F 1 ( x ) = 0 − 1 1 + e − 0.2 = − 1 1 + e − 0.2 R_{2,1}:r_{1, i}=0-\frac{1}{1+e^{0.2}}=-\frac{1}{1+e^{0.2}}\\R_{2,2}:F_1(x)=0-\frac{1}{1+e^{-0.2}}=-\frac{1}{1+e^{-0.2}} R2,1:r1,i=01+e0.21=1+e0.21R2,2:F1(x)=01+e0.21=1+e0.21

  • 给这棵树的每个叶子节点分别赋一个参数 c m , j c_{m,j} cm,j,来拟合残差。

c 2 , j = ∑ x i ∈ R 2 , j r 1 , i ∑ x i ∈ R 2 , j ( y i − r 2 , i ) ( 1 − y i + r 2 , i ) c_{2, j}=\frac{\sum_{x_i \in R_{2, j}} r_{1, i}}{\sum_{x_i \in R_{2, j}}\left(y_i-r_{2, i}\right)\left(1-y_i+r_{2, i}\right)} c2,j=xiR2,j(yir2,i)(1yi+r2,i)xiR2,jr1,i

( x 0 , x 1 ∈ R 2 , 1 ) , c 2 , 1 = − 1 1 + e − 0.2 − 1 1 + e − 0.2 [ ( 0 − ( − 1 1 + e − 0.2 ) ) ∗ ( 1 − 0 + ( − 1 1 + e − 0.2 ) ) ] ∗ 2 = 1 1 1 + e 2 − 1 = − 1.8187 ( x 2 , x 3 ∈ R 2 , 2 ) , c 2 , 2 = 1.8187 \begin{array}{ll}\left(x_0, x_1 \in R_{2,1}\right), & c_{2,1}=\frac{-\frac{1}{1+e^{-0.2}}-\frac{1}{1+e^{-0.2}}}{[(0-(-\frac{1}{1+e^{-0.2}}))*(1-0+(-\frac{1}{1+e^{-0.2}}))]*2}=\frac{1}{\frac{1}{1+e^2}-1}=-1.8187 \\ \left(x_2, x_3 \in R_{2,2}\right), & c_{2,2}=1.8187\end{array} (x0,x1R2,1),(x2,x3R2,2),c2,1=[(0(1+e0.21))(10+(1+e0.21))]21+e0.211+e0.21=1+e2111=1.8187c2,2=1.8187

v2-73b99303ccecdc78f59d9da5e7523de4_1440w

第三棵树

v2-c24b8c302fdb469ab169bc2425d336a5_1440w

第四棵树

v2-7e26f3b72816524240155e8b672e63b9_1440w

第五棵树

v2-9640af653aa523ef5cc2d5ffcf8a9249_1440w

  1. 模型预测阶段
  • F 0 ( x ) = 0 F_0(x)=0 F0(x)=0
  • F 1 ( x ) F_1(x) F1(x)中,测试样本的年龄为25,大于划分节点21岁,所以被预测为2.0000
  • F 2 ( x ) F_2(x) F2(x) 中,测试样本的年龄为25,大于划分节点21岁,所以被预测为1.8187
  • F 3 ( x ) F_3(x) F3(x)中,测试样本的年龄为25,大于划分节点21岁,所以被预测为1.6826
  • F 4 ( x ) F_4(x) F4(x) 中,测试样本的年龄为25,大于划分节点21岁,所以被预测为1.5769
  • F 5 ( x ) F_5(x) F5(x) 中,测试样本的年龄为25,大于划分节点21岁,所以被预测为1.4927
  • 最终预测结果为: F ( x ) = 0.0000 + 0.1 ∗ ( 2.0000 + 1.8187 + 1.6826 + 1.5769 + 1.4927 ) = 0.8571 P ( Y = 1 ∣ x ) = 1 1 + e − F ( x ) = 1 1 + e − 0.8571 = 0.7021 \begin{aligned} & F(x)=0.0000+0.1 *(2.0000+1.8187+1.6826+1.5769+1.4927)=0.8571 \\ & P(Y=1 \mid x)=\frac{1}{1+e^{-F(x)}}=\frac{1}{1+e^{-0.8571}}=0.7021\end{aligned} F(x)=0.0000+0.1(2.0000+1.8187+1.6826+1.5769+1.4927)=0.8571P(Y=1x)=1+eF(x)1=1+e0.85711=0.7021

GBDT多分类

softmax损失函数

当使用逻辑回归处理多标签的分类问题时,如果一个样本只对应于一个标签,我们可以假设每个样本属于不同标签的概率服从于几何分布,使用多项逻辑回归(Softmax Regression)来进行分类:
P ( Y = y i ∣ x ) = h θ ( x ) [ P ( Y = 1 ∣ x ; θ ) P ( Y = 2 ∣ x ; θ ) ⋅ ⋅ ⋅ P ( Y = k ∣ x ; θ ) ] = 1 ∑ j = 1 k e θ j T x [ e θ 1 T x e θ 2 T x ⋅ ⋅ ⋅ e θ k T x ] \begin{aligned} P\left(Y=y_i \mid x\right)=h_\theta(x)\left[\begin{array}{c} P(Y=1 \mid x ; \theta) \\ P(Y=2 \mid x ; \theta) \\ \cdot \\ \cdot \\ \cdot \\ P(Y=k \mid x ; \theta) \end{array}\right] \\ =\frac{1}{\sum_{j=1}^k e^{\theta_j^T x}}\left[\begin{array}{c} e^{\theta_1^T x} \\ e^{\theta_2^T x} \\ \cdot \\ \cdot \\ \cdot \\ e^{\theta_k^T x} \end{array}\right] \end{aligned} P(Y=yix)=hθ(x) P(Y=1x;θ)P(Y=2x;θ)P(Y=kx;θ) =j=1keθjTx1 eθ1Txeθ2TxeθkTx
其中, θ 1 , θ 2 , … , θ k ∈ R n \theta_1, \theta_2, \ldots, \theta_k \in \mathfrak{R}^n θ1,θ2,,θkRn 为模型的参数,而 1 ∑ j = 1 k e θ j T x \frac{1}{\sum_{j=1}^k e^{\theta_j^T x}} j=1keθjTx1 可以看作是对概率的归一化。一般来说,多项逻辑回归具有参数冗余的特点,即将 θ 1 , θ 2 , … , θ k \theta_1, \theta_2, \ldots, \theta_k θ1,θ2,,θk 同时加减一个向量后预测结果不变,因为 P ( Y = 1 ∣ x ) + P ( Y = 2 ∣ x ) + … + P ( Y = k ∣ x ) = 1 P(Y=1 \mid x)+P(Y=2 \mid x)+\ldots+P(Y=k \mid x)=1 P(Y=1x)+P(Y=2x)++P(Y=kx)=1 ,所以 P ( Y = 1 ∣ x ) = 1 − P ( Y = 2 ∣ x ) − … − P ( Y = k ∣ x ) P(Y=1 \mid x)=1-P(Y=2 \mid x)-\ldots-P(Y=k \mid x) P(Y=1x)=1P(Y=2x)P(Y=kx)

假设从参数向量 θ j T \theta_j^T θjT 中减去向量 ψ \psi ψ ,这时每一个 θ j T \theta_j^T θjT 都变成了 θ j T − ψ ( j = 1 , 2 , … , k ) \theta_j^T-\psi(j=1,2, \ldots, k) θjTψ(j=1,2,,k) 。此时假设函数变成了以下公式:

P ( Y = y j ∣ x ; θ ) = e θ j T x ∑ i = 1 k e θ i T x = e ( θ j T − ψ ) x ∑ i = 1 k e ( θ i T − ψ ) x = e θ j T x × e − ψ x ∑ i = 1 k e θ i T x × e − ψ x = e θ j T x ∑ i = 1 k e θ i T x \begin{aligned} P\left(Y=y_j \mid x ; \theta\right) & =\frac{e^{\theta_j^T x}}{\sum_{i=1}^k e^{\theta_i^T x}} \\ & =\frac{e^{\left(\theta_j^T-\psi\right) x}}{\sum_{i=1}^k e^{\left(\theta_i^T-\psi\right) x}} \\ & =\frac{e^{\theta_j^T x} \times e^{-\psi x}}{\sum_{i=1}^k e^{\theta_i^T x} \times e^{-\psi x}} \\ & =\frac{e^{\theta_j^T x}}{\sum_{i=1}^k e^{\theta_i^T x}}\end{aligned} P(Y=yjx;θ)=i=1keθiTxeθjTx=i=1ke(θiTψ)xe(θjTψ)x=i=1keθiTx×eψxeθjTx×eψx=i=1keθiTxeθjTx

从上式可以看出,从 θ j T \theta_j^T θjT 中减去 ψ \psi ψ 完全不影响假设函数的预测结果,这表明前面的Softmax回归模型中存在冗余的参数。特别地,当类别数为 2 时,
h θ ( x ) = 1 e θ 1 T x + e θ 2 T x [ e θ 1 T x e θ 2 T x ] h_\theta(x)=\frac{1}{e^{\theta_1^T x}+e^{\theta_2^T x}}\left[\begin{array}{l} e^{\theta_1^T x} \\ e^{\theta_2^T x} \end{array}\right] hθ(x)=eθ1Tx+eθ2Tx1[eθ1Txeθ2Tx]

利用参数冗余的特点,我们将所有的参数减去 θ 1 \theta_1 θ1 ,上式变为:
h θ ( x ) = 1 e 0 ⋅ x + e ( θ 2 T − θ 1 T ) x [ e 0 ⋅ x e ( θ 2 T − θ 1 T ) x ] = [ 1 1 + e θ T x 1 − 1 1 + e θ T x ] \begin{aligned} h_\theta(x) & =\frac{1}{e^{0 \cdot x}+e^{\left(\theta_2^T-\theta_1^T\right) x}}\left[\begin{array}{c} e^{0 \cdot x} \\ e^{\left(\theta_2^T-\theta_1^T\right) x} \end{array}\right] \\ & =\left[\begin{array}{c} \frac{1}{1+e^{\theta^T x}} \\ 1-\frac{1}{1+e^{\theta^T x}} \end{array}\right] \end{aligned} hθ(x)=e0x+e(θ2Tθ1T)x1[e0xe(θ2Tθ1T)x]=[1+eθTx111+eθTx1]

其中 θ = θ 2 − θ 1 \theta=\theta_2-\theta_1 θ=θ2θ1 。而整理后的式子与逻辑回归一致。因此,多项逻辑回归实际上是二分类逻辑回归在多标签分类下的一种拓展。

当存在样本可能属于多个标签的情况时,我们可以训练 k k k 个二分类的逻辑回归分类器。第 i i i 个分类器用以区分每个样本是否可以归为第 i i i 类,训练该分类器时,需要把标签重新整理为 “第 i i i 类标签” 与 “非第 i i i 类标签” 两类。通过这样的办法,我们就解决了每个样本可能拥有多个标签的情况。

在二分类的逻辑回归中,对输入样本 x x x 分类结果为类别1和 0 的概率可以写成下列形式:
P ( Y = y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y P(Y=y \mid x ; \theta)=\left(h_\theta(x)\right)^y\left(1-h_\theta(x)\right)^{1-y} P(Y=yx;θ)=(hθ(x))y(1hθ(x))1y

其中, h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^T x}} hθ(x)=1+eθTx1 是模型预测的概率值, y y y 是样本对应的类标签。

将问题泛化为更一般的多分类情况:
P ( Y = y i ∣ x ; θ ) = ∏ i = 1 K P ( y i ∣ x ) y i = ∏ i = 1 K h θ ( x ) y i P\left(Y=y_i \mid x ; \theta\right)=\prod_{i=1}^K P\left(y_i \mid x\right)^{y_i}=\prod_{i=1}^K h_\theta(x)^{y_i} P(Y=yix;θ)=i=1KP(yix)yi=i=1Khθ(x)yi

由于连乘可能导致最终结果接近 0 的问题,一般对似然函数取对数的负数,变成最小化对数似然函数。
− log ⁡ P ( Y = y i ∣ x ; θ ) = − log ⁡ ∏ i = 1 K P ( y i ∣ x ) y i = − ∑ i = 1 K y i log ⁡ ( h θ ( x ) ) -\log P\left(Y=y_i \mid x ; \theta\right)=-\log \prod_{i=1}^K P\left(y_i \mid x\right)^{y_i}=-\sum_{i=1}^K y_i \log \left(h_\theta(x)\right) logP(Y=yix;θ)=logi=1KP(yix)yi=i=1Kyilog(hθ(x))

GBDT多分类原理

将GBDT应用于二分类问题需要考虑逻辑回归模型,同理,对于GBDT多分类问题则需要考虑以下 Softmax模型:
P ( y = 1 ∣ x ) = e F 1 ( x ) ∑ i = 1 k e F i ( x ) P ( y = 2 ∣ x ) = e F 2 ( x ) ∑ i = 1 k e F i ( x ) … ⋯ P ( y = k ∣ x ) = e F k ( x ) ∑ i = 1 k e F i ( x ) \begin{gathered} P(y=1 \mid x)=\frac{e^{F_1(x)}}{\sum_{i=1}^k e^{F_i(x)}} \\ P(y=2 \mid x)=\frac{e^{F_2(x)}}{\sum_{i=1}^k e^{F_i(x)}} \\ \ldots \\ \cdots \\ P(y=k \mid x)=\frac{e^{F_k(x)}}{\sum_{i=1}^k e^{F_i(x)}} \end{gathered} P(y=1x)=i=1keFi(x)eF1(x)P(y=2x)=i=1keFi(x)eF2(x)P(y=kx)=i=1keFi(x)eFk(x)

其中 F 1 … F k F_1 \ldots F_k F1Fk k k k 个不同的CART回归树集成。每一轮的训练实际上是训练了 k k k 棵树去拟合 softmax的每一个分支模型的负梯度。softmax模型的单样本损失函数为:
 loss  = − ∑ i = 1 k y i log ⁡ P ( y i ∣ x ) = − ∑ i = 1 k y i log ⁡ e F i ( x ) ∑ j = 1 k e F j ( x ) \text { loss }=-\sum_{i=1}^k y_i \log P\left(y_i \mid x\right)=-\sum_{i=1}^k y_i \log \frac{e^{F_i(x)}}{\sum_{j=1}^k e^{F_j(x)}}  loss =i=1kyilogP(yix)=i=1kyilogj=1keFj(x)eFi(x)
伪代码

v2-2ff9038d2b798c3d36dc8e8d5d41ec4d_1440w

对于训练过程的解释:

第一步我们在训练的时候,是针对样本 x x x 每个可能的类都训练一个分类回归树。举例说明,目前样本有三类,也就是 K = 3 K=3 K=3 ,样本 x x x 属于第二类。那么针对该样本的分类标签,其实可以用一个三维向量 [ 0 , 1 , 0 ] [0,1,0] [0,1,0] 来表示。 0 表示样本不属于该类, 1 表示样本属于该类。由于样本已经属于第二类了,所以第二类对应的向量维度为 1 ,其它位置为 0 。

针对样本有三类的情况,我们实质上在每轮训练的时候是同时训练三颗树。第一颗树针对样本 x x x的第一类,输入为 ( x , 0 ) (x, 0) (x,0) 。第二颗树输入针对样本 x x x 的第二类,输入为 ( x , 1 ) (x, 1) (x,1) 。第三颗树针对样本 x x x 的第三类,输入为 ( x , 0 ) (x, 0) (x,0) 。这里每颗树的训练过程其实就CART树的生成过程。在此我们参照CART生成树的步骤即可解出三颗树,以及三颗树对 x x x 类别的预测值 F 1 ( x ) , F 2 ( x ) , F 3 ( x ) F_1(x), F_2(x), F_3(x) F1(x),F2(x),F3(x) ,那么在此类训练中,我们仿照多分类的逻辑回归,使用Softmax 来产生概率,则属于类别 1 的概率为:
p 1 ( x ) = exp ⁡ ( F 1 ( x ) ) ∑ k = 1 3 exp ⁡ ( F k ( x ) ) p_1(x)=\frac{\exp \left(F_1(x)\right)}{\sum_{k=1}^3 \exp \left(F_k(x)\right)} p1(x)=k=13exp(Fk(x))exp(F1(x))

并且我们可以针对类别 1 求出残差 y ~ 1 = 0 − p 1 ( x ) \tilde{y}_1=0-p_1(x) y~1=0p1(x) ;类别 2 求出残差 y ~ 2 = 1 − p 2 ( x ) \tilde{y}_2=1-p_2(x) y~2=1p2(x) ;类别 3 求出残差 y ~ 3 = 0 − p 3 ( x ) \tilde{y}_3=0-p_3(x) y~3=0p3(x)

然后开始第二轮训练,针对第一类输入为 ( x , y ~ 1 ) \left(x, \tilde{y}_1\right) (x,y~1) ,针对第二类输入为 ( x , y ~ 2 ) \left(x, \tilde{y}_2\right) (x,y~2) ,针对第三类输入为 ( x , y ~ 3 ) \left(x, \tilde{y}_3\right) (x,y~3) 。继续训练出三颗树。一直迭代M轮。每轮构建 3 颗树。

当 K=3 时,我们其实应该有三个式子:
F 1 M ( x ) = ∑ m = 1 M c 1 m I ( x ϵ R 1 m ) F 2 M ( x ) = ∑ m = 1 M c 2 m I ( x ϵ R 2 m ) F 3 M ( x ) = ∑ m = 1 M c 3 m I ( x ϵ R 3 m ) \begin{aligned} & F_{1 M}(x)=\sum_{m=1}^M c_{1 m} I\left(x \epsilon R_{1 m}\right) \\ & F_{2 M}(x)=\sum_{m=1}^M c_{2 m} I\left(x \epsilon R_{2 m}\right) \\ & F_{3 M}(x)=\sum_{m=1}^M c_{3 m} I\left(x \epsilon R_{3 m}\right) \end{aligned} F1M(x)=m=1Mc1mI(xϵR1m)F2M(x)=m=1Mc2mI(xϵR2m)F3M(x)=m=1Mc3mI(xϵR3m)
当训练完以后,对于新样本 ,我们要预测该样本类别的时候,便可以有这三个式子产生三个值 F 1 M , F 2 M , F 3 M F_{1M},F_{2M},F_{3M} F1M,F2M,F3M。样本属于某个类别的概率为: p i ( x ) = exp ⁡ ( F i M ( x ) ) ∑ k = 1 3 exp ⁡ ( F k M ( x ) ) p_i(x)=\frac{\exp \left(F_{i M}(x)\right)}{\sum_{k=1}^3 \exp \left(F_{k M}(x)\right)} pi(x)=k=13exp(FkM(x))exp(FiM(x))

推导 y ~ i k \tilde{y}_{ik} y~ik

微信图片_20231126103544

推导 γ j k m \gamma_{jkm} γjkm

微信图片_20231126110046

)

微信图片_20231126110059

微信图片_20231126110102

微信图片_20231126110106

微信图片_20231126121820
注意:权重的 k − 1 k \frac{k-1}{k} kk1我还是没有证出来,有大佬回证的可以在评论区说一下哈

GBDT多分类实例

  • 数据集

x i 6 12 14 18 20 65 31 40 1 2 100 101 65 54 y i 0 0 0 0 0 1 1 1 1 1 2 2 2 2 \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline x_i & 6 & 12 & 14 & 18 & 20 & 65 & 31 & 40 & 1 & 2 & 100 & 101 & 65 & 54 \\ \hline y_i & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 2 & 2 & 2 & 2 \\ \hline \end{array} xiyi60120140180200651311401112110021012652542

  • 模型训练阶段

  • 首先,由于我们需要转化3个二分类的问题,所以需要先做一步one-hot:
    x i 6 12 14 18 20 65 31 40 1 2 100 101 65 54 y i 0 0 0 0 0 1 1 1 1 1 2 2 2 2 y i , 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 y i , 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 y i , 2 0 0 0 0 0 0 0 0 0 0 0 1 1 1 \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline x_i & 6 & 12 & 14 & 18 & 20 & 65 & 31 & 40 & 1 & 2 & 100 & 101 & 65 & 54 \\ \hline y_i & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 2 & 2 & 2 & 2 \\ \hline y_{i, 0} & 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ \hline y_{i, 1} & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0 & 0 \\ \hline y_{i, 2} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 1 & 1 \\ \hline \end{array} xiyiyi,0yi,1yi,260100120100140100180100200100651010311010401010110102101010020001012001652001542001

    参数设置:
    学习率:learning_rate = 1
    树的深度:max_depth = 2
    迭代次数:n_trees = 5

    1. 先对所有的样本,进行初始化 F k 0 ( x i ) = c o u n t ( k ) c o u n t ( n ) F_{k0}(x_i)=\frac{count(k)}{count(n)} Fk0(xi)=count(n)count(k),就是各类别在总样本集中的占比,结果如下表。

      v2-0c9535cd24219b07ad0893f820f3bd76_1440w

    2. 对第一个类别 ( y i y_i yi=0) 拟合第一颗树 m=1)

    v2-ec002ab2961e0db569a3fae02913d3d1_1440w

    • 利用公式 p k , m ( x ) = e F k , m ( x ) ∑ l = 1 K e F l , m ( x ) p_{k, m}(x)=\frac{e^{F_{k, m}(x)}}{\sum_{l=1}^K e^{F_{l, m}(x)}} pk,m(x)=l=1KeFl,m(x)eFk,m(x) 计算概率。

    • 计算负梯度值,以 x 1 x_1 x1 为例 (k=0,i=1) :

    y ~ i k = y i , k − p k , m − 1 y ~ 10 = y 1 , 0 − p 0 , 0 = 1 − e F 0 , 0 ( x 1 ) e F 0 , 0 ( x 1 ) + e F 1 , 0 ( x 1 ) + e F 2 , 0 ( x 1 ) ≈ 0.6588 \begin{aligned} & \tilde{y}_{i k}=y_{i, k}-p_{k, m-1} \\ & \tilde{y}_{10}=y_{1,0}-p_{0,0}=1-\frac{e^{F_{0,0}(x_1)}}{e^{F_{0,0}(x_1)}+e^{F_{1,0}(x_1)}+e^{F_{2,0}(x_1)}}\approx0.6588\end{aligned} y~ik=yi,kpk,m1y~10=y1,0p0,0=1eF0,0(x1)+eF1,0(x1)+eF2,0(x1)eF0,0(x1)0.6588

    同样地,计算其它样本可以有下表:

    v2-788cfbbb2ca1ea019b5b15e075442533_1440w

    1. 寻找回归树的最佳划分节点。在GBDT的建树中,可以采用如MSE、MAE等作为分裂准则来确定分裂点。本文采用的分裂准则是MSE,具体计算过程如下。遍历所有特征的取值,将每个特征值依次作为分裂点,然后计算左子结点与右子结点上的MSE,寻找两者加和最小的一个.

      比如,选择 x 8 = 1 x_8=1 x8=1 作为分裂点时 ( x < 1 ) (x<1) (x<1)
      左子结点上的集合的MSE为:
      M S E l e f t = 0 M S E_{l e f t}=0 MSEleft=0

      右子节点上的集合的MSE为:
      M S E right  = ( 0.6588 − 0.04342 ) 2 + … + ( − 0.3412 − 0.04342 ) 2 = 3.2142 \begin{aligned} M S E_{\text {right }} & =(0.6588-0.04342)^2+\ldots+(-0.3412-0.04342)^2 \\ & =3.2142 \end{aligned} MSEright =(0.65880.04342)2++(0.34120.04342)2=3.2142

      对所有特征计算完后可以发现,当选择 x 6 = 31 x_6=31 x6=31 做为分裂点时,可以得到最小的MSE, M S E = 1.42857 M S E=1.42857 MSE=1.42857

    2. x 6 = 31 x_6=31 x6=31 拟合第一棵回归树

      v2-1a36bddbd939f693afc07cb12024afe3_1440w

    3. 给这棵树的每个叶子节点分别赋一个参数 γ j k m \gamma_{jkm} γjkm,来拟合残差。

      γ 101 = 0.6588 ∗ 5 + ( − 0.3412 ) ∗ 2 0.6588 ∗ ( 1 − 0.6588 ) ∗ 5 + 0.3412 ∗ ( 1 − 0.3412 ) ∗ 2 ∗ 2 3 ≈ 1.1066 \gamma_{101}=\frac{0.6588*5+(-0.3412)*2}{0.6588*(1-0.6588)*5+0.3412*(1-0.3412)*2}*\frac{2}{3}\approx1.1066 γ101=0.6588(10.6588)5+0.3412(10.3412)20.65885+(0.3412)2321.1066

      γ 201 = − 1.0119 \gamma_{201}=-1.0119 γ201=1.0119

    最后,更新 F k m ( x i ) F_{k m}\left(x_i\right) Fkm(xi) 可得下表:
    F k m ( x i ) = F k , m − 1 ( x i ) + η ∗ ∑ x i ∈ R j k m γ j k m ∗ I ( x i ∈ R j k m ) F_{k m}\left(x_i\right)=F_{k, m-1}\left(x_i\right)+\eta * \sum_{x_i \in R_{j k m}} \gamma_{j k m} * I\left(x_i \in R_{j k m}\right) Fkm(xi)=Fk,m1(xi)+ηxiRjkmγjkmI(xiRjkm)

    x ( i ) x_(i) x(i)612141820653140121001016554
    F 0 , 1 ( x i ) F_{0,1}(x_i) F0,1(xi)1.46381.46381.46381.46381.4638-0.6548-0.6548-0.65481.46381.4638-0.6548-0.6548-0.6548-0.6548

    至此第一个类别 (类别0) 的第一颗树拟合完毕,下面开始拟合第二个类别(类别 1 ) 的第一棵树,按照上述过程建立其他两个类别。反复进行,直到训练了M轮。

GBDT与AdaBoost的不同

  • 弱评估器

GBDT的弱评估器输出类型不再与整体集成算法输出类型一致。对于AdaBoost或随机森林算法来说,当集成算法执行的是回归任务时,弱评估器也是回归器,当集成算法执行分类任务时,弱评估器也是分类器。但对于GBDT而言,无论GBDT整体在执行回归/分类/排序任务,弱评估器一定是回归器。GBDT通过sigmoid或softmax函数输出具体的分类结果,但实际弱评估器一定是回归器。

  • 损失函数𝐿(𝑥,𝑦)

在GBDT当中,损失函数范围不再局限于固定或单一的某个损失函数,而从数学原理上推广到了任意可微的函数。因此GBDT算法中可选的损失函数非常多,GBDT实际计算的数学过程也与损失函数的表达式无关。

  • 拟合残差

GBDT依然自适应调整弱评估器的构建,但却不像AdaBoost一样通过调整数据分布来间接影响后续弱评估器。相对的,GBDT通过修改后续弱评估器的拟合目标来直接影响后续弱评估器的结构

具体地来说,在AdaBoost当中,每次建立弱评估器之前需要修改样本权重,且用于建立弱评估器的是样本𝑋以及对应的𝑦,在GBDT当中,我们不修改样本权重,但每次用于建立弱评估器的是样本𝑋以及当下集成输出𝐻(𝑥𝑖)与真实标签𝑦的差异(𝑦−𝐻(𝑥𝑖)))。这个差异在数学上被称之为残差(Residual),因此GBDT不修改样本权重,而是通过拟合残差来影响后续弱评估器结构

  • 抽样思想

GBDT加入了随机森林中随机抽样的思想,在每次建树之前,允许对样本和特征进行抽样来增大弱评估器之间的独立性(也因此可以有袋外数据集)。虽然Boosting算法不会大规模地依赖于类似于Bagging的方式来降低方差,但由于Boosting算法的输出结果是弱评估器结果的加权求和,因此Boosting原则上也可以获得由“平均”带来的小方差红利。当弱评估器表现不太稳定时,采用与随机森林相似的方式可以进一步增加Boosting算法的稳定性。

对于AdaBoost或随机森林算法来说,当集成算法执行的是回归任务时,弱评估器也是回归器,当集成算法执行分类任务时,弱评估器也是分类器*。但对于GBDT而言,无论GBDT整体在执行回归/分类/排序任务,弱评估器一定是回归器。GBDT通过sigmoid或softmax函数输出具体的分类结果,但实际弱评估器一定是回归器。

  • 损失函数𝐿(𝑥,𝑦)

在GBDT当中,损失函数范围不再局限于固定或单一的某个损失函数,而从数学原理上推广到了任意可微的函数。因此GBDT算法中可选的损失函数非常多,GBDT实际计算的数学过程也与损失函数的表达式无关。

  • 拟合残差

GBDT依然自适应调整弱评估器的构建,但却不像AdaBoost一样通过调整数据分布来间接影响后续弱评估器。相对的,GBDT通过修改后续弱评估器的拟合目标来直接影响后续弱评估器的结构

具体地来说,在AdaBoost当中,每次建立弱评估器之前需要修改样本权重,且用于建立弱评估器的是样本𝑋以及对应的𝑦,在GBDT当中,我们不修改样本权重,但每次用于建立弱评估器的是样本𝑋以及当下集成输出𝐻(𝑥𝑖)与真实标签𝑦的差异(𝑦−𝐻(𝑥𝑖)))。这个差异在数学上被称之为残差(Residual),因此GBDT不修改样本权重,而是通过拟合残差来影响后续弱评估器结构

  • 抽样思想

GBDT加入了随机森林中随机抽样的思想,在每次建树之前,允许对样本和特征进行抽样来增大弱评估器之间的独立性(也因此可以有袋外数据集)。虽然Boosting算法不会大规模地依赖于类似于Bagging的方式来降低方差,但由于Boosting算法的输出结果是弱评估器结果的加权求和,因此Boosting原则上也可以获得由“平均”带来的小方差红利。当弱评估器表现不太稳定时,采用与随机森林相似的方式可以进一步增加Boosting算法的稳定性。

GBDT中的max_depth参数是指每个回归的最大深度。它控制了回归的叶子节点的最大层数,也就是决策的分支深度。在GBDT中,每个回归都是通过学习前一棵的残差来进行训练的,max_depth参数可以限制每棵的复杂度,防止过拟合。 具体来说,max_depth参数限制了每个回归的分裂次数,即的最大深度。较小的max_depth值会使得每棵更加简单,有较少的叶子节点和分支,限制了的复杂度。较大的max_depth值会使得每棵更加复杂,有更多的叶子节点和分支,提高了的拟合能力。 在实际使用中,选择max_depth参数的取值要根据具体问题和数据集的特点来确定。如果数据集很大,特征较多,可以适当增大max_depth来提高模型的表达能力。如果数据集较小,特征较少,可以适当减小max_depth来避免过拟合。 参考文献: 在本文中,我们首先引出回归与梯度提升算法结合的优势;然后详细推导GBDT回归算法的原理,并用实际案例解释GBDT回归算法;其次不仅用Python3实现GBDT回归算法,还用sklearn实现GBDT回归算法;最后,介绍了GBDT回归任务常见的损失函数、GBDT的正则化和我对GBDT回归算法若干问题的思考。GBDT中的是回归(不是分类),GBDT可以用来做回归预测,这也是我们本文讲的GBDT回归算法,但是GBDT调整后也可以用于分类任务。让我们期待一下GBDT分类算法,在分类任务中的表现吧! 【10】GBDT详细讲解&常考面试题要点,地址:https://mp.weixin.qq.com/s/M2PwsrAnI1S9SxSB1guHdg 【7】GBDT:梯度提升决策,地址:https://www.jianshu.com/p/005a4e6ac775<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深入理解GBDT回归算法](https://blog.csdn.net/qq_42722197/article/details/124811872)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值