【機器學習】深入剖析梯度提升決策樹(GBDT)分類與迴歸

1. 梯度提升決策樹概述

梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)是以決策樹爲基學習器的一種Boosting算法,它在每一輪迭代中建立一個決策樹,使當前模型的殘差在梯度方向上減少;然後將該決策樹與當前模型進行線性組合得到新模型;不斷重複,直到決策樹數目達到指定的值,得到最終的強學習器。

上一篇博客【機器學習】集成學習——Boosting與AdaBoost原理詳解與公式推導對AdaBoost算法做了總結,GBDT與AdaBoost的主要區別有:

1. 迭代策略不同:AdaBoost在每一輪迭代中都要更新樣本分佈;GBDT迭代學習上一輪得到的加法模型與真實值之間的殘差,它並不顯式改變樣本分佈,而是利用殘差變相地增大錯誤樣本的權重。

2. 組合策略不同:AdaBoost中誤差率越低的基學習器在最終模型中所佔比重越高,而GBDT每棵樹的權值都相等。

3. 基學習器限定不同:AdaBoost的基學習器不限,使用最廣泛的是決策樹和神經網絡;而GBDT的基學習器限定爲決策樹,且是迴歸樹。

4. 損失函數不同:AdaBoost分類算法的損失函數限定爲指數損失,而GBDT可以是指數損失函數和對數似然函數。

2. 提升樹

在介紹梯度提升決策樹之前,我們首先來介紹提升樹。

介紹了提升方法本身是採用加法模型和前向分步算法的一種方法,而提升樹(Boosting Tree)是以決策樹爲基學習器的一種提升方法,對分類問題決策樹是二叉分類樹,對迴歸問題決策樹是二叉迴歸樹。

提升樹模型可以表示爲決策樹的加法模型:

                                        H_ { T } ( x ) = \sum _ { t = 1 } ^ { T } h \left( x ; \Theta _ { t } \right)                         (1)

其中,h \left( x ; \Theta _ { t } \right)表示第t棵決策樹;\Theta _ { t }是的參數;T是決策樹個數。

根據前向分步算法,第t步將要得到的提升樹模型爲:

                                        H _ { t } ( x ) = H_ { t - 1 } ( x ) + h \left( x ; \Theta _ { t } \right)                         (2)

其中,H _ { t } ( x )爲當前模型。那麼第Ť輪迭代的目標是得到能最小化{H_t} \ left(x \ right)的損失函數的第t棵決策樹h \left( x ; \Theta _ { t } \right)的參數,即:

                                \hat { \Theta } _ { t } = \arg \min _ { \Theta _ { t } } \sum _ { i = 1 } ^ { m } L \left( y _ { i } , H _ { t - 1 } \left( x _ { i } \right) + h \left( x _ { i } ; \Theta _ { t } \right) \right)                         (3)

對於二類分類問題,只要把AdaBoost中的基分類器限定爲二類分類樹即可。可以說這時的提升樹是AdaBoost的特殊情況。

對於迴歸問題,當採用平方誤差損失函數( y - H ) ^ { 2 }時,第t次迭代的損失是:

                                \begin{array}{l} L\left( {y,{H_t}(x)} \right) = L\left( {y,{H_{t - 1}}(x) + h\left( {x;{\Theta _t}} \right)} \right)\\ {\rm{ = }}{\left[ {y - {H_{t - 1}}(x) - h\left( {x;{\Theta _t}} \right)} \right]^2}\\ {\rm{ = }}{\left[ {{r_t} - h\left( {x;{\Theta _t}} \right)} \right]^2} \end{array}                         (4)

h\left( {x;{\Theta _t}} \right){\rm{ = }}y - {H_{t - 1}}(x){\rm{ = }}{r_t}時,損失最小。也就是說,第t次迭代的優化目標是擬合當前模型的殘差。

3. 梯度提升決策樹原理

在提升方法中,每次迭代的優化問題可以分爲兩部分:一、求葉結點區域;二、給定葉結點區域,求區域內最優擬合值。

對於第二個問題,它是一個簡單的“定位”估計,最優解很容易得到;但對於第一個問題,當損失函數不是平方誤差和指數損失,而是一般損失函數時,求解區域是困難的,最小化損失函數問題的簡單、快速求解算法是不存在的。

針對這一問題,梯度提升決策樹利用最速下降法來近似求解加法模型中的每一顆決策樹,具體來說,就是在每次迭代中,使新建的決策樹都沿損失函數減少最快的方向——負梯度方向減少損失函數

當前模型的負梯度爲:

                                r_{ti} = - \left[ \frac { \partial L \left( y , H \left( x _ { i } \right) \right) } { \partial H \left( x _ { i } \right) } \right] _ { H ( x ) = H_ { t - 1 } ( x ) }                         (5)

當損失函數是平方誤差時,當前模型的負梯度就等於殘差,沿負梯度方向減少損失函數就相當於擬合殘差。

但當損失函數不是平方誤差時,負梯度就是殘差的近似值,稱爲“廣義殘差或僞殘差”。例如,當損失函數是絕對誤差時,負梯度是殘差的符號函數,因此在每次迭代時,決策樹將擬合當前殘差的符號。

總之,GBDT利用廣義殘差來擬合每一輪迭代中的迴歸樹。

一些廣泛應用的損失函數的梯度如下表:

GBDT常用損失函數列表
GBDT常用損失函數列表

4. GBDT迴歸算法 

下面介紹GBDT迴歸算法,也可以當做GBDT的通用算法。必須聲明的是,無論是GBDT分類算法還是迴歸算法,弱學習器都是迴歸樹,這是由殘差本質決定的。


輸入:訓練集D = \left\{ \left( x _ { i } , y _ { i } \right) \right\} _ { i = 1 } ^ { m },其中x _ { i } \in \chi \subseteq R ^ { d}y _ { i } \in \mathcal { Y } \subseteq \mathbf { R };損失函數L

過程:

        (1)初始化模型H _ { 0 } ( x ),估計使損失函數最小化的常數值\gamma,初始模型是隻有一個根結點的樹。

                               {H_0}(x) = \mathop {\arg \min }\limits_\gamma \sum\limits_{i = 1}^m L \left( {{y_i},\gamma } \right)

        (2)對迭代輪次{t = 1,2,\ ldots,T}

                (a)對樣本i = 1,2 , \cdots , m,計算當前模型的廣義殘差:

                                r _ { t i } = - \left[ \frac { \partial L \left( y _ { y } , H \left( x _ { i } \right) \right) } { \partial H \left( x _ { i } \right) } \right] _ { H ( x ) = H_ { t - 1 } ( x ) }                        

                (b)利用\left( {{x_i},{r_{ti}}} \right),i = 1,2, \ldots ,m擬合一棵迴歸樹,得到第t棵樹的葉結點區域{R_{tj}},j = 1,2, \cdots ,J

                (c)對每個葉結點區域{R_{tj}},j = 1,2, \cdots ,J,計算能使區域{R_{tj}}損失函數最小化的最佳預測值{\gamma _{tj}}

                                \gamma _ { t j } = \arg \min _ { \gamma } \sum _ { x _ { i } \in R _ { t j } } L \left( y _ { i } , H _ { t - 1 } \left( x _ { i } \right) + \gamma \right)

                (d)得到本輪迭代最佳擬合迴歸樹:

                                h _ { t } ( x) = \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)

                (e)更新本輪迭代的加法模型:

                                H _ { t } ( x ) = H _ { t - 1 } ( x ) + h _ { t } ( x)= H _ { t - 1 } ( x ) + \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)

        (3)得到最終的強學習器:

                                H ( x ) = H _ { T } ( x ) = \sum _ { t = 1 } ^ { T } \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)

輸出:迴歸樹H ( x )


5. 二元GBDT分類算法

在分類任務中,由於樣本輸出是離散值,無法從輸出類別擬合殘差,因此使用類別的預測概率值和真實概率值的差來當做殘差。

GBDT分類算法的損失函數可以取指數損失函數和對數似然函數,如果選擇指數損失函數,則GBDT退化爲AdaBoost。因此我們這裏只討論對數似然損失函數。

二元分類的對數似然損失函數是:

                                L ( y ,H ( x ) ) = \log ( 1 + \exp ( - 2y H( x ) ) )                         (6)

負梯度爲:

                {r_{ti}} = - {\left[ {\frac{{\partial L\left( {y,H\left( {{x_i}} \right)} \right))}}{{\partial H\left( {{x_i}} \right)}}} \right]_{H(x) = {H_{t - 1}}(x)}} = \frac{{2{y_i}}}{{1 + \exp \left( {2{y_i}{H_{t - 1}}\left( {{x_i}} \right)} \right)}}        (7)

利用\left( {{x_i},{r_{ti}}} \right),i = 1,2, \ldots ,m擬合一棵迴歸樹,得到第t棵樹的葉結點區域{R_{tj}},j = 1,2, \cdots ,J

每個葉結點區域{R_{tj}},j = 1,2, \cdots ,J的最佳預測值{\gamma _{tj}}爲:

                {\gamma _{tj}} = \underbrace {\arg \min }_\gamma \sum\limits_{{x_i} \in {R_{tj}}} {\log } \left( {1 + \exp \left( { - {2y_i}\left( {{H_{t - 1}}\left( {{x_i}} \right) + \gamma } \right)} \right)} \right)        (8)

由於上式比較難優化,我們用近似值代替:

                                {\gamma _{tj}} = \frac{{\sum\limits_{x \in {R_{tj}}} {{r_{ti}}} }}{{\sum\limits_{x \in {R_{tj}}} {\left| {{r_{ti}}} \right|} (2 - |{r_{ti}}|)}}                         (9)

除了負梯度計算和葉子節點最佳預測值計算不同,其他都與迴歸算法一致。

得到最終的模型H ( x ) = H _ { T } ( x ) = \sum _ { t = 1 } ^ { T } \sum _ { j = 1 } ^ { J } \gamma _ { t j } I \left( x \in R _ { t j } \right)後,用來進行概率估計得到:

                                P ( y = 1 | x ) = p = \frac { e ^ { 2H ( x ) } } { 1 + e ^ { 2 H ( x ) } } = \frac { 1 } { 1 + e ^ { - 2 H ( x ) } }                         (10)

                                P ( y = - 1 | x ) = 1 - p = \frac { 1 } { 1 + e ^ { 2 H ( x ) } }                         (11)

6. GBDT優缺點

優點:

1. 可以靈活處理混合型數據(異構特徵);

2. 強大的預測能力;

3. 在輸出空間中對異常點的魯棒性(通過具有魯棒性的損失函數實現,如Huber損失函數和分位數損失函數)。

缺點:

1. 在更大規模的數據集或複雜度更高的模型上的可擴展性差;

2. 由於提升算法的有序性,因此很難做到並行。

參考文獻:

1. 《統計學習方法》第八章提升方法——李航

2. 《統計學習基礎》第十章提升和加法樹——Trevor Hastie等

3. 論文《Greedy Function Approximation: A Gradient Boosting Machine》——Jerome H. Friedman

4. 梯度提升樹(GBDT)原理小結

5. GBDT原理詳解

6. Scikit-learn 0.19.x 中文文檔 Gradient Tree Boosting(梯度樹提升)

 

 

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