您的位置:首页 > 其它

最详细的数学推导Boost、GBDT、XGboost之GBDT

2019-06-23 00:32 183 查看

文章目录

  • 三、GBDT完整算法
  • 参考
  • 一、系列文章

    1.本文是在Boost的基础上进行讨论,Boost既是GBDT的基础,也是经典所在
    2.基于本文还有XGboost

    二、G+BDT

    GBDT 全称是 Gradient Boosting Decision Tree,可以说是由G(Gradient )+BDT(Boosting Decision Tree)组成,下面分两部分说明

    1.Boosting Decision Tree(提升树)

    • 类似文章1,提升树是采用加法模型与前向分布算法,以决策树为基函数的Boosting模型。
      他们之间的关系:提升树是Boosting的基学习器为决策树树模型(分类为二叉分类树;回归问题为二叉回归树)的具体体现
    • 提升树模型表示为加法模型:fM=∑m=1MT(x;Θm)f_M=\sum_{m=1}^M T\left(x;\Theta_m\right) fM​=m=1∑M​T(x;Θm​)
      MMM为树的个数,Θm\Theta_mΘm​为决策树的参数,T(x;Θm)T\left(x;\Theta_m\right)T(x;Θm​)为决策树
    • 采用前向分步算法。首先确定初始提升决策树f0(x)=0f_0\left(x\ri 3ff7 ght)=0f0​(x)=0
    • 第mmm步的模型是
      fm(x)=fm−1(x)+T(x;Θm)f_m\left(x\right)=f_{m-1}\left(x\right)+T\left(x;\Theta_m\right)fm​(x)=fm−1​(x)+T(x;Θm​)可以看到fm−1(x)f_{m-1}(x)fm−1​(x)为当前模型,通过训练误差极小化得到m步的决策树
      (1.0)Θ^m=arg⁡min⁡Θm∑i=1NL(yi,fm−1(xi)+T(xi;Θm))\hat{\Theta}_m=\mathop{\arg\min}_{\Theta_m}\sum_{i=1}^N L\left(y_i,f_{m-1}\left(x_i\right)+T\left(x_i;\Theta_m\right)\right) \tag{1.0}Θ^m​=argminΘm​​i=1∑N​L(yi​,fm−1​(xi​)+T(xi​;Θm​))(1.0)
    • 提升树中决策树的表示形式(可以与XGboost中的决策树模型比较)
      T(x;Θ)=∑j=1JcjI(x∈Rj)T\left(x;\Theta\right)=\sum_{j=1}^J c_j I\left(x\in R_j\right) T(x;Θ)=j=1∑J​cj​I(x∈Rj​)
      其中,参数Θ={(R1,c1),(R2,c2),…,(RJ,cJ)}\Theta=\{\left(R_1,c_1\right),\left(R_2,c_2\right),\dots,\left(R_J,c_J\right)\}Θ={(R1​,c1​),(R2​,c2​),…,(RJ​,cJ​)}表示决策树的区域划分和各区域上的常量值。JJJ是决策树的复杂度即叶子结点个数。

    由于指示函数的应用配合累计号就能够表示树模型,样本点属于区域RjR_{j}Rj​则指示函数变为1,其他都为0,所以T(x;Θ)T\left(x;\Theta\right)T(x;Θ)完成了从xix_{i}xi​输入到划分区域均值的映射

    • 不同的提升树算法不同主要体现在损失函数的使用,如用平方误差损失的回归问题,指数损失函数的分类问题,以及一般损失函数决策问题
      采用平方误差损失函数:
      L(y,f(x))=(y−f(x))2L\left(y,f\left(x\right)\right)=\left(y-f\left(x\right)\right)^2L(y,f(x))=(y−f(x))2
      求解式1.0损失变为:
      (1.1)L(y,fm−1(x)+T(x;Θm))=[y−fm−1(x)−T(x;Θm)]2=[r−T(x;Θm)]2\begin{aligned} L\left(y,f_{m-1}\left(x\right)+T\left(x;\Theta_m\right)\right) &=\left[y-f_{m-1}\left(x\right)-T\left(x;\Theta_m\right)\right]^2 \\ &=\left[r-T\left(x;\Theta_m\right)\right]^2 \tag{1.1} \end{aligned}L(y,fm−1​(x)+T(x;Θm​))​=[y−fm−1​(x)−T(x;Θm​)]2=[r−T(x;Θm​)]2​(1.1)
      这里得到式1.1中:r=y−fm−1(x)r=y-f_{m-1}\left(x\right)r=y−fm−1​(x)是当前拟合数据的残差
      所以对于回归类问题来说只要拟合数据的残差,得到新的一棵树
      完整算法如下:

      实例参考2。

    2.G(Gradient )梯度提升

    1. 当损失函数是平方损失和指数损失函数时,梯度提升树每一步优化是很简单的,但是对于一般损失函数而言,往往每一步优化起来不那么容易,针对这一问题,Freidman提出了梯度提升树算法,这是利用最速下降的近似方法,其关键是利用损失函数的负梯度作为提升树算法中的残差的近似值
    2. 损失函数的负梯度
      −[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)} −[∂f(xi​)∂L(y,f(xi​))​]f(x)=fm−1​(x)​
      3.可以做一个实验,假设选用平方损失
      L(y,f(x))=12(y−f(x))2L\left(y,f\left(x\right)\right)=\frac{1}{2}\left(y-f\left(x\right)\right)^2L(y,f(x))=21​(y−f(x))2
      此时负梯度:
      −[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)=y−f(xi)-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)} = y-f(x_{i}) −[∂f(xi​)∂L(y,f(xi​))​]f(x)=fm−1​(x)​=y−f(xi​)
      可以看到就是残差,可以认为负梯度方向是对残差更加泛化求解的近似。

    三、GBDT完整算法

    输入:训练数据集T={(x1,y1),(x2,y2),…,(xN,yN)}T=\{\left(x_1,y_1\right),\left(x_2,y_2\right),\dots,\left(x_N,y_N\right)\}T={(x1​,y1​),(x2​,y2​),…,(xN​,yN​)}; 损失函数L(y,f(x))L\left(y,f\left(x\right)\right)L(y,f(x))
    输出:梯度提升决策树f^(x)\hat{f}\left(x\right)f^​(x)
    (1)初始化一个弱学习器
    f0(x)=arg⁡min⁡c∑i=1NL(yi,c)f_0\left(x\right)=\mathop{\arg\min}_c\sum_{i=1}^N L\left(y_i,c\right)f0​(x)=argminc​i=1∑N​L(yi​,c)
    (2)对m=1,2,…,Mm=1,2,\dots,Mm=1,2,…,M
    (a)对i=1,2,…,Ni=1,2,\dots,Ni=1,2,…,N,计算
    rmi=−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)r_{mi}=-\left[\frac{\partial L\left(y,f\left(x_i\right)\right)}{\partial f\left(x_i\right)}\right]_{f\left(x\right)=f_{m-1}\left(x\right)}rmi​=−[∂f(xi​)∂L(y,f(xi​))​]f(x)=fm−1​(x)​
    与BDT类似只是这里把求了近似残差。
    (b)对rmir_{mi}rmi​拟合一个回归树,得到第mmm棵树的叶结点区域Rmj,j=1,2,…,JR_{mj},j=1,2,\dots,JRmj​,j=1,2,…,J
    (c)对j=1,2,…,Jj=1,2,\dots,Jj=1,2,…,J,计算
    cmj=arg⁡min⁡c∑xi∈RmjL(yi,fm−1(xi)+c)c_{mj}=\mathop{\arg\min}_c\sum_{x_i\in R_{mj}} L\left(y_i, f_{m-1}\left(x_i\right)+c\right)cmj​=argminc​xi​∈Rmj​∑​L(yi​,fm−1​(xi​)+c)
    (d)更新fm(x)=fm−1(x)+∑j=1JcmjI(x∈Rmj)f_m\left(x\right)=f_{m-1}\left(x\right)+\sum_{j=1}^J c_{mj} I\left(x\in R_{mj}\right)fm​(x)=fm−1​(x)+∑j=1J​cmj​I(x∈Rmj​)
    (3)得到回归梯度提升决策树
    f^(x)=∑m=1M∑j=1JcmjI(x∈Rmj)\hat{f}\left(x\right)=\sum_{m=1}^M \sum_{j=1}^J c_{mj} I\left(x\in R_{mj}\right) f^​(x)=m=1∑M​j=1∑J​cmj​I(x∈Rmj​)

    参考

    1. 《机器学习》. 周志华
    2. 《统计学习方法》. 李航
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: