【机器学习】GBDT

来源 | AI小白入门
作者 | 文杰
编辑 | yuquanle
原文链接

在这里插入图片描述

本文介绍了提升树模型中的梯度提升树算法GBDT (Gradient Boosting Decision Tree) 。首先介绍了提升树通过拟合残差来提升学习器的设计思想。然后介绍了基于梯度提升的GBDT算法,核心在于学习器本身不再拟合残差,而是学习器拟合残差的一阶梯度,权重拟合残差的一阶系数。最后介绍了GBDT对应分类和回归场景的学习流程。

提升树

提升树GBDT同样基于最小化第mm个学习器和前m1m-1个学习器累加起来损失函数最小,提升树采用残差的思想来最小化损失函数,将投票权重放到学习器上,使得基学习器的权重都为1。

GBDT将损失用一阶多项式拟合,基学习器拟合梯度,学习器的权重为一阶多项式的系数。

在前面的Adaboost中,我们需要学习MM个基学习器,赋予不同的权重组合得到最后的强学习器。它是基于MM个基学习器组合而成。而提升树中,直接将他们以“残差(损失函数的残差)”的形式累加起来,故也为加法模型,而且是逐步累加。

提升树模型如下:
fM(x)=m=1MT(x;θm) f_M(x) = \sum_{m=1}^M T(x; \theta_m)
其中,T(x,θm)T(x,\theta_{m})表示决策树,θm\theta_{m}为决策树的参数,MM为树的个数。

提升树优化过程:

  • 输入:训练集{(xi,yi)}i=1N\left \{ (x_i,y_i)\right \}^N_{i=1},损失函数L(y,f(x))L(y,f(x))

  • 输出:提升树fM(x)f_{M}(x)

  1. 初始化f0(x)=0f_{0}(x)=0

  2. m=1,2,...Mm=1,2,...M

    2.1 计算残差:
    rmi=yifm1(xi)   ,{1,2,,N} r_{mi} = y_{i}-f_{m-1}(x_{i})\ \ \ ,\left \{1,2,…,N \right \}
    2.2 拟合残差rmir_{mi}学习基学习器T(x;θm)T(x;\theta_{m}),训练集为{(xi,rmi)}i=1N\left \{ (x_i,r_{mi})\right \}^N_{i=1}

    2.3 更新模型:

    fm(x)=fm1(x)+T(x;θm)f_{m}(x) = f_{m-1}(x) + T(x; \theta_m)

  3. 得到最终的强学习器:
    fM(x)=m=1MT(x;θm) f_M(x) = \sum_{m=1}^M T(x; \theta_m)
    可以看出,提升树本质与Adboost一致,也是最小化第mm个学习器和前m1m-1个学习器组合的损失函数,不同的是提升树采用决策树作为基学习器,采用残差的思想使得每个决策树的投票权重为11

GBDT

GBDT是基学习器采用的Decision Tree的Gradient Boosting方法。Gradient Boosting模型与Adaboost的形式一致,采用MM个基学习器的线性组合得到最终模型:
fM(x)=mγmT(x;θm) f_M(x) = \sum_m \gamma_m T(x; \theta_m)
首先确定初始模型,定义初始基学习器f0(x)f_0(x),当模型迭代到第mm步时:
fm(x)=fm1(x)+γmT(x;θm) f_m(x) = f_{m-1}(x) + \gamma_mT(x; \theta_m)
通过最小化损失来确定参数θmθ_m的值:
argminθmiL(yi,fm1(xi)+γmT(x;θm)) arg \min_{\theta_m} \sum_iL(y_i,f_{m-1}(x_i) + \gamma_mT(x; \theta_m))
这里有两种理解Gradient Boosting的方式,从优化角度可以理解是采用梯度下降算法,TT表示负梯度方向,γm\gamma_{m}为步长。从模型角度我们可以理解为损失函数一阶多项式展开γmT(x,θm)+fm1\gamma_{m}T(x,\theta_{m})+f_{m-1},而TT表示一阶信息,γm\gamma_m为系数。

优化角度,保证损失函数在递减:
L(yi,fm(xi))<L(yi,fm1(xi)) L(y_i,f_m(x_i)) < L(y_i,f_{m-1}(x_i))
为了使得损失函数不断减少,即梯度下降:
fm(xi)=fm1(xi)+γm(L(yi,fm1(xi))fm1(xi)) f_{m}(x_i) = f_{m-1}(x_i) +\gamma_{m}\left(-\frac{\partial L(y_i,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}\right)
fm(x)=fm1(x)+γmT(x;θm)f_m(x) = f_{m-1}(x) + \gamma_mT(x; \theta_m)代入上式有:
T(x;θm)=L(yi,fm1(xi))fm1(xi) T(x; \theta_m)=-\frac{\partial L(y_i,f_{m-1}(x_i))}{\partial f_{m-1}(x_i)}

所以Gradient Boosting 的算法流程如下:

  • 输入:训练集{(xi,yi)}i=1N\left \{ (x_i,y_i)\right \}^N_{i=1},损失函数L(y,f(x))L(y,f(x))

  • 输出:fM(x)f_{M}(x)

  1. 初始化f0(x)=0f_{0}(x)=0

  2. m=1,2,...Mm=1,2,...M

    2.1 计算梯度:
    rmi=[L(yi,f(xi))f(xi)]f(xi)=fm1(x)   ,{1,2,,N} r_{mi} = \left [ -\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)} \right ]_{f(x_i) = f_{m-1}(x)} \ \ \ ,\left \{1,2,…,N \right \}
    2.2 拟合梯度rmir_{mi}学习基学习器T(x;θm)T(x;\theta_{m}),训练集为{(xi,rmi)}i=1N\left \{ (x_i,r_{mi})\right \}^N_{i=1}

    2.3 根据梯度下降算法,计算学习器γm\gamma_{m}:
    γm=argminγiL(yi,fm1(xi)+γT(x;θm)) \gamma_m = arg \min_{\gamma}\sum_iL(y_i,f_{m-1}(x_i) + \gamma T(x; \theta_m))
    2.4 更新模型: fm(x)=fm1(x)+γmT(x;θm)f_{m}(x) = f_{m-1}(x) + \gamma_m T(x; \theta_m)

  3. 得到最终的强学习器:
    fM(x)=m=1MγmT(x;θm) f_M(x) = \sum_{m=1}^M \gamma_m T(x; \theta_m)
    可以看出Gradient Boosting 是一个不断基于残差弥补的模型,目标不断地减少Bais,而没有关注Variance。它不像随机森林的集成引入随机性减少Variance的思想。

下面考虑决策树为基学习器的Gradient Boosting的方法GBDT,其在GB基础上有两点值得一提:

  1. GBDT,采用决策树作为基函数将样本划分到固定数目JJ个决策区间Rmj,j=1,2..J,m=1,2..MR_{mj},j=1,2..J,m=1,2..M

  2. 在决策树中决策函数采用指示函数I(xRmj)I(x\in R_{mj}),梯度与步长的积直接放到γmj\gamma_{mj}上。

下面给出GBDT回归和分类两个问题的算法流程

GBDT 回归

  • 输入:训练集{(xi,yi)}i=1N\left \{ (x_i,y_i)\right \}^N_{i=1}xiRn,yRx_i \in \mathbb{R}^n,y \in \mathbb{R},损失函数L(y,f(x))L(y,f(x))

  • 输出:fM(x)f_{M}(x)

  1. 初始时给出一个最优的偏置常数ccf0(x)=cf_{0}(x)=c
    f0(x)=argminciL(yi,c) f_0(x) = arg\min_c \sum_i L(y_i , c)
  2. m=1,2,...Mm=1,2,...M

​ a)计算梯度:
rmi=[L(yi,f(xi))f(xi)]f(xi)=fm1(x)   ,{1,2,,N} r_{mi} = \left [ -\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)} \right ]_{f(x_i) = f_{m-1}(x)} \ \ \ ,\left \{1,2,…,N \right \}
​ b)拟合梯度rmir_{mi}学习一个回归树T(x;θm) ⁣= ⁣αI(xRmj)T(x;\theta_{m})\!=\!\alpha I(x \in R_{mj}),产生JJ个决策区间Rmj,j=1,2..JR_{mj},j=1,2..J

​ c)对于决策区间j=1,2..Jj=1,2..J,计算γmj\gamma_{mj}:
γmj=argminγxiRmjL(yi,fm1(xi)+γmjI(xRmj)) \gamma_{mj} = arg \min_{\gamma}\sum_{x_{i}\in R_{mj}}L(y_i,f_{m-1}(x_i) + \gamma_{mj} I(x \in R_{mj}))
​ d)更新模型: fm(x)=fm1(x)+j=1JγmjI(xRmj)f_{m}(x) = f_{m-1}(x) +\sum_{j=1}^{J}\gamma_{mj} I(x \in R_{mj})

  1. 得到最终的强学习器:
    fM(x)=m=1Mj=1JγmjI(xRmj) f_M(x) = \sum_{m=1}^M \sum_{j=1}^{J}\gamma_{mj} I(x \in R_{mj})

GBDT分类

考虑KK分类问题,采用Softmax思想,将KK类映射到KK维。第mm个决策树的决策第kk维的值为fM,k(x)f_{M,k}(x),对输出进行Softmax归一化,可以得到kk类的概率为pm,k(x)p_{m,k}(x),KK类的概率和kpm,k(x)=1\sum_{k}p_{m,k}(x)=1,分类损失函数采用交叉熵损失。
pm,k(x)=exp(fm,k(x))l=1Kexp(fm,l(x)),   k=1,,K p_{m,k}(x) = \frac{exp(f_{m,k}(x))}{\sum^K_{l = 1}exp(f_{m,l}(x))}, \ \ \ k=1,…,K
似然函数为:
L(yi,fm(xi))=k=1K[fm,k(xi)]yik L(y_i,f_{m}(x_i)) = \prod_{k=1}^K [f_{m,k}(x_i)]^{y_{ik}}
对数损失函数为:
L(yi,fm(xi))=k=1Kyiklogfm,k(xi) L(y_i,f_{m}(x_i)) = -\sum_{k=1}^K y_{ik}log f_{m,k}(x_i)
由于Softmax将分类映射到KK维,对应的基分类器和损失函数都是KK维。因此算法流程中负梯度方向也是一个KK维向量。

算法流程:

  • 输入:训练集{(xi,yi)}i=1N\left \{ (x_i,y_i)\right \}^N_{i=1}xiRn,yRx_i \in \mathbb{R}^n,y \in \mathbb{R},损失函数L(y,f(x))L(y,f(x))

  • 输出:fM(x)f_{M}(x)

  1. 初始时f0,k(x)=0f_{0,k}(x)=0

  2. m=1,2,...Mm=1,2,...M

    2.1 对决策树fm1,kf_{m-1,k}进行Softmax归一化:
    pm1,k(x)=exp(fm1,k(x))l=1Kexp(fm1,l((x)),   k=1,,K p_{m-1,k}(x) = \frac{exp(f_{m-1,k}(x))}{\sum^K_{l = 1}exp(f_{m-1,l}((x))}, \ \ \ k=1,…,K
    2.2 对k=1,2..Kk=1,2..K:

    2.2.1 计算梯度:
    rik=L(yi,fm1(xi))fm1,k(xi)=yikpm1,k(xi),  i=1,2,N r_{ik} = \frac{\partial L(y_i,f_{m-1}(x_i))}{ \partial f_{m-1,k}(x_i)} = y_{ik} –p_{m-1,k}(x_i), \ \ i = 1,2,…N
    2.2.2 拟合梯度rikr_{ik}学习第mm个决策树T(x;θm) ⁣= ⁣αI(xRmkj)T(x;\theta_{m})\!=\!\alpha I(x \in R_{mkj})在第kk维产生的JJ个决策区间Rmkj,j=1,2..JR_{mkj},j=1,2..J:
    rik=L(yi,fm1(xi))fm1,k(xi)=yikpm1,k(xi),  i=1,2,N r_{ik} = \frac{\partial L(y_i,f_{m-1}(x_i))}{ \partial f_{m-1,k}(x_i)} = y_{ik} –p_{m-1,k}(x_i), \ \ i = 1,2,…N
    2.2.3 计算第mm颗树第kk维在区间RmjR_{mj}的参数γmkj\gamma_{mkj}:
    γmkj=K1KxiRmkjrikxiRmkjrik(1rik),   j=1,2,..., \gamma_{mkj} = \frac{K-1}{K} \frac{ \sum_{x_i \in R_{mkj}} r_{ik} }{\sum_{x_i \in R_{mkj}} |r_{ik}|(1-|r_{ik}|)} , \ \ \ j = 1,2,...,
    2.2.4 更新模型:
    fm,k(x)=fm1,k(x)+j=1JγmkjI(xRmkj)f_{m,k}(x) = f_{m-1,k}(x) +\sum_{j=1}^{J}\gamma_{mkj} I(x \in R_{mkj})

  3. 得到最终的强学习器:
    fM(x)=m=1Mj=1JγmjI(xRmj) f_M(x) = \sum_{m=1}^M \sum_{j=1}^{J}\gamma_{mj} I(x \in R_{mj})
    GBDT到此,可以看出Boosting的这些方法,都是前向分步加法模型,分类回归采用不同的损失函数,加法模型都是考虑学习MM模型来不断地减小损失函数,即第mm个模型的学习是基于前m1m-1个模型组合起来最小化损失函数。

Adboost是基于最小化损失函数在导数为00处取到,针对二分类问题导出样本系数,决策器权重系数,决策树。

提升树是基于残差思想最小化损失函数,使得决策树的权重为11。GBDT采用一阶多项式来拟合残差,进而导出梯度提升的思想。GBDT中γmTm\gamma_{m} T_{m}存在冗余项,在GBDT中用决策树拟合梯度,γ\gamma来确定步长。

更多AI、NLP干货资源请关注公众号:AI小白入门(ID: StudyForAI):
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章