GBDT理論知識總結

一. GBDT的經典paper:《Greedy Function Approximation:A Gradient Boosting Machine》

Abstract

Function approximation是從function space方面進行numerical optimization,其將stagewise additive expansions和steepest-descent minimization結合起來。而由此而來的Gradient Boosting Decision Tree(GBDT)能夠適用於regression和classification,都具備完整的,魯棒性高,解釋性好的優勢。算法

 

1. Function estimation

在機器學習的任務中,咱們通常面對的問題是構造loss function,並求解其最小值。能夠寫成以下形式:app

一般的loss function有:機器學習

1. regression:均方偏差(y-F)2,絕對偏差|y-F|函數

2. classification:negative binomial log-likelihood log(1+e-2yF)學習

通常狀況下,咱們會把F(x)看作是一系列帶參數的函數集合 F(x;P),因而進一步將其表示爲「additive」的形式:大數據

1.1 Numerical optimizatin

咱們能夠經過選取一個參數模型F(x;P),來將function optimization問題轉化爲一個parameter optimization問題:優化

進一步,咱們能夠把要優化的參數也表示爲「additive」的形式:spa

1.2 Steepest-descent

梯度降低是最簡單,最經常使用的numerical optimization method之一。3d

首先,計算出當前的梯度:blog

where 

而梯度降低的步長爲:

where ,稱爲「line search」。

 

2. Numerical optimization in function space

如今,咱們考慮「無參數」模型,轉而考慮直接在function space 進行numerical optimization。這時候,咱們將在每一個數據點x處的函數值F(x)看作是一個「參數」,仍然是來對loss funtion求解最小值。

在function space,爲了表示一個函數F(x),理想情況下有無數個點,但在現實中,咱們用有限個(N個)離散點來表示它:

按照以前的numerical optimization的方式,咱們須要求解:

 使用steepest-descent,有:

where ,and 

 

3. Finite data

當咱們面對的狀況爲:用有限的數據集表示x,y的聯合分佈的時候,上述的方法就有點行不通了。咱們能夠試試「greedy-stagewise」的方法:

可是對於通常的loss function和base learner來講,(9)式是很難求解的。給定了m次迭代後的當前近似函數Fm-1(x),當步長的direction是指數函數集合當中的一員時,能夠看作是在求解最優值上的greedy step,一樣,它也能夠被看作是相同限制下的steepest-descent step。做爲比較,給出了在無限制條件下,在Fm-1(x)處的steepest-descent step direction。一種行之有效的方法就是在求解的時候,把它取爲無限制條件下的負梯度方向

where 

這就把(9)式中較難求解的優化問題轉化爲了一個基於均方偏差的擬合問題。

Gradient Boosting的通用解法以下:

 

 

二. 對於GBDT的一些理解

1. Boosting

GBDT的全稱是Gradient Boosting Decision Tree,Gradient Boosting和Decision Tree是兩個獨立的概念。所以咱們先說說Boosting。Boosting的概念很好理解,意思是用一些弱分類器的組合來構造一個強分類器。所以,它不是某個具體的算法,它說的是一種理念。和這個理念相對應的是一次性構造一個強分類器。像支持向量機,邏輯迴歸等都屬於後者。一般,咱們經過相加來組合分類器,形式以下:

2. Gradient Boosting Modeling(GBM)

給定一個問題,咱們如何構造這些弱分類器呢?Gradient Boosting Modeling (GBM) 就是構造 這些弱分類的一種方法。一樣,它指的不是某個具體的算法,仍然只是一個理念。在理解 Gradient Boosting Modeling 以前,咱們先看看一個典型的優化問題:

針對這種優化問題,有一個經典的算法叫 Steepest Gradient Descent,也就是最深梯度降低法。 這個算法的過程大體以下: 

以上迭代過程能夠這麼理解:整個尋優的過程就是個小步快跑的過程,每跑一小步,都往函數當前降低最快的那個方向走一點。

這樣尋優獲得的結果能夠表示成加和形式,即:

這個形式和以上Fm(x)是否是很是類似? Gradient Boosting 正是由此啓發而來。 構造Fm(x)自己也是一個尋優的過程,只不過咱們尋找的不是一個最優勢,而是一個最優的函數。優化的目標一般都是經過一個損失函數來定義,即:

其中Loss(F(xi), yi)表示損失函數Loss在第i個樣本上的損失值,xi和yi分別表示第 i 個樣本的特徵和目標值。常見的損失函數如平方差函數:

相似最深梯度降低法,咱們能夠經過梯度降低法來構造弱分類器f1, f2, ... , fm,只不過每次迭代時,令 

即對損失函數L,以 F 爲參考求取梯度。 

這裏有個小問題,一個函數對函數的求導很差理解,並且一般都沒法經過上述公式直接求解 到梯度函數gi。爲此,採起一個近似的方法,把函數Fi−1理解成在全部樣本上的離散的函數值,即: 

不難理解,這是一個 N 維向量,而後計算

這是一個函數對向量的求導,獲得的也是一個梯度向量。注意,這裏求導時的變量仍是函數F,不是樣本xk。 

嚴格來講 ĝi(xk) for k = 1,2, ... , N 只是描述了gi在某些個別點上的值,並不足以表達gi,但咱們能夠經過函數擬合的方法從ĝi(xk) for k = 1,2, ... , N 構造gi,這樣咱們就經過近似的方法獲得了函數對函數的梯度求導。 

所以 GBM 的過程能夠總結爲以下: 

常量函數f0一般取樣本目標值的均值,即 

3. Gradient Boosting Decision Tree

以上 Gradient Boosting Modeling 的過程當中,尚未說清楚如何經過離散值 ĝi−1(xj) for j = 1,2,3,...N 構造擬合函數gi−1。函數擬合是個比較熟知的概念,有不少現成的方法,不過有一種擬合方法廣爲應用,那就是決策樹 Decision Tree,有關決策樹的概念,理解GBDT重點首先是Gradient Boosting,其次纔是 Decision Tree。GBDT 是 Gradient Boosting 的一種具體實例,只不過這裏的弱分類器是決策樹。若是你改用其餘弱分類器 XYZ,你也能夠稱之爲 Gradient Boosting XYZ。只不過 Decision Tree 很好用,GBDT 才如此引人注目。 

4. 損失函數

談到 GBDT,常聽到一種簡單的描述方式:「先構造一個(決策)樹,而後不斷在已有模型和實際樣本輸出的殘差上再構造一顆樹,依次迭代」。其實這個說法不全面,它只是 GBDT 的一種特殊狀況,爲了看清這個問題,須要對損失函數的選擇作一些解釋。 

從對GBM的描述裏能夠看到Gradient Boosting過程和具體用什麼樣的弱分類器是徹底獨立的,能夠任意組合,所以這裏再也不刻意強調用決策樹來構造弱分類器,轉而咱們來仔細看看弱分類器擬合的目標值,即梯度ĝi−1(xj ),以前咱們已經提到過 

5. GBDT 和 AdaBoost

Boosting 是一類機器學習算法,在這個家族中還有一種很是著名的算法叫 AdaBoost,是 Adaptive Boosting 的簡稱,AdaBoost 在人臉檢測問題上尤爲出名。既然也是 Boosting,能夠想象它的構造過程也是經過多個弱分類器來構造一個強分類器。那 AdaBoost 和 GBDT 有什麼區別呢? 

二者最大的區別在於,AdaBoost 不屬於 Gradient Boosting,即它在構造弱分類器時並無利用到梯度降低法的思想,而是用的Forward Stagewise Additive Modeling (FSAM)。爲了理解 FSAM,在回過頭來看看以前的優化問題。

嚴格來講以前描述的優化問題要求咱們同時找出α1, α2, ... , αm和f1, f2, f3 ... , fm,這個問題很 難。爲此咱們把問題簡化爲分階段優化,每一個階段找出一個合適的α 和f 。假設咱們已經 獲得前 m-1 個弱分類器,即Fm−1(x),下一步在保證Fm−1(x)不變的前提下,尋找合適的 αmfm(x)。按照損失函數的定義,咱們能夠獲得 

 

若是 Loss 是平方差函數,則咱們有 

這裏yi − Fm−1(xi)就是當前模型在數據上的殘差,能夠看出,求解合適的αmfm(x)就是在這 當前的殘差上擬合一個弱分類器,且損失函數仍是平方差函數。這和 GBDT 選擇平方差損失 函數時構造弱分類器的方法剛好一致。 

(1)擬合的是「殘差」,對應於GBDT中的梯度方向。

(2)損失函數是平方差函數,對應於GBDT中用Decision Tree來擬合「殘差」。

其中 wim−1= exp(−yi(Fm−1(xi))和要求解的αmfm(x)無關,能夠當成樣本的權重,所以在這種狀況下,構造弱分類器就是在對樣本設置權重後的數據上擬合,且損失函數仍是指數形式。 這個就是 AdaBoost,不過 AdaBoost 最先並非按這個思路推出來的,相反,是在 AdaBoost 提出 5 年後,人們纔開始用 Forward Stagewise Additive Modeling 來解釋 AdaBoost 背後的原理。

爲何要把平方差和指數形式 Loss 函數單獨拿出來講呢?這是由於對這兩個損失函數來講, 按照 Forward Stagewise Additive Modeling 的思路構造弱分類器時比較方便。若是是平方差損 失函數,就在殘差上作平方差擬合構造弱分類器; 若是是指數形式的損失函數,就在帶權 重的樣本上構造弱分類器。但損失函數若是不是這兩種,問題就沒那麼簡單,好比絕對差值 函數,雖然構造弱分類器也能夠表示成在殘差上作絕對差值擬合,但這個子問題自己也不容 易解,由於咱們是要構造多個弱分類器的,因此咱們固然但願構造弱分類器這個子問題比較 好解。所以 FSAM 思路沒法推廣到其餘一些實用的損失函數上。相比而言,Gradient Boosting Modeling (GBM) 有什麼優點呢?GBM 每次迭代時,只須要計算當前的梯度,並在平方差損 失函數的基礎上擬合梯度。雖然梯度的計算依賴原始問題的損失函數形式,但這不是問題, 只要損失函數是連續可微的,梯度就能夠計算。至於擬合梯度這個子問題,咱們老是能夠選 擇平方差函數做爲這個子問題的損失函數,由於這個子問題是一個獨立的迴歸問題。

所以 FSAM 和 GBM 獲得的模型雖然從形式上是同樣的,都是若干弱模型相加,可是他們求 解弱分類器的思路和方法有很大的差異。只有當選擇平方差函數爲損失函數時,這兩種方法 等同。 

 6. 爲什麼GBDT受人青睞

以上比較了 GBM 和 FSAM,能夠看到 GBM 在損失函數的選擇上有更大的靈活性,但這不足以解釋GBDT的所有優點。GBDT是拿Decision Tree做爲GBM裏的弱分類器,GBDT的優點 首先得益於 Decision Tree 自己的一些良好特性,具體能夠列舉以下:

  1. Decision Tree 能夠很好的處理 missing feature,這是他的自然特性,由於決策樹的每一個節點只依賴一個 feature,若是某個 feature 不存在,這顆樹依然能夠拿來作決策,只是少一些路徑。像邏輯迴歸,SVM 就沒這個好處。

  2. Decision Tree 能夠很好的處理各類類型的 feature,也是自然特性,很好理解,一樣邏輯迴歸和 SVM 沒這樣的自然特性。

  3. 對特徵空間的 outlier 有魯棒性,由於每一個節點都是 x < 𝑇 的形式,至於大多少,小多少沒有區別,outlier 不會有什麼大的影響,一樣邏輯迴歸和 SVM 沒有這樣的自然特性。

  4. 若是有不相關的 feature,沒什麼干擾,若是數據中有不相關的 feature,頂多這個 feature 不出如今樹的節點裏。邏輯迴歸和 SVM 沒有這樣的自然特性(可是有相應的補救措施,好比邏輯迴歸裏的 L1 正則化)。

  5. 數據規模影響不大,由於咱們對弱分類器的要求不高,做爲弱分類器的決策樹的深 度通常設的比較小,即便是大數據量,也能夠方便處理。像 SVM 這種數據規模大的時候訓練會比較麻煩。

固然 Decision Tree 也不是毫完好陷,一般在給定的不帶噪音的問題上,他能達到的最佳分類效果仍是不如 SVM,邏輯迴歸之類的。可是,咱們實際面對的問題中,每每有很大的噪音,使得 Decision Tree 這個弱勢就不那麼明顯了。並且,GBDT 經過不斷的疊加組合多個小的 Decision Tree,他在不帶噪音的問題上也能達到很好的分類效果。換句話說,經過GBDT訓練組合多個小的 Decision Tree 每每要比一次性訓練一個很大的 Decision Tree 的效果好不少。所以不能把 GBDT 理解爲一顆大的決策樹,幾顆小樹通過疊加後就再也不是顆大樹了,它比一顆大樹更強。  

相關文章
相關標籤/搜索