【機器學習】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):
在這裏插入圖片描述

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