天天看點

GBDT(梯度提升決策樹)算法梳理

提升樹利用加法模型和前向分步算法實作學習的優化過程。當損失函數是平方損失和zhi指數損失函數時,每一步優化是很簡單的。但對一般函數而言,往往每一步優化并不那麼容易。針對這一問題,提出梯度提升算法。這是利用最速下降法的近似方法,其關鍵是利用損失函數的負梯度在目前模型的值

GBDT(梯度提升決策樹)算法梳理

作為回歸問題提升樹算法中的殘差的近似值,拟合一個回歸樹。

參考:

李航《統計學習方法》

  • 前向分步算法

前向分步算法(forward stagewise algorithm)求解這一優化問題的想法是:因為學習的是加法模型,如果能夠從前向後,每一步隻學習一個基函數及其系數,逐漸逼近優化目标函數式,那麼就可以簡化優化的複雜度,具體地,每步隻需優化如下損失函數:

GBDT(梯度提升決策樹)算法梳理

學習加法模型的前向分步算法如下:

輸入:訓練資料集

GBDT(梯度提升決策樹)算法梳理

損失函數:

GBDT(梯度提升決策樹)算法梳理

基函數集:

GBDT(梯度提升決策樹)算法梳理

輸出:加法模型

GBDT(梯度提升決策樹)算法梳理

算法步驟:

1. 初始化

GBDT(梯度提升決策樹)算法梳理

2. 對于m=1,2,..M

a)極小化損失函數

GBDT(梯度提升決策樹)算法梳理

得到參數

GBDT(梯度提升決策樹)算法梳理

GBDT(梯度提升決策樹)算法梳理

b)更新

GBDT(梯度提升決策樹)算法梳理

c)最終得到加法模型

GBDT(梯度提升決策樹)算法梳理

就這樣,前向分步算法将同時求解從m=1到M的所有參數(

GBDT(梯度提升決策樹)算法梳理

GBDT(梯度提升決策樹)算法梳理

)的優化問題簡化為逐次求解各個

GBDT(梯度提升決策樹)算法梳理

GBDT(梯度提升決策樹)算法梳理

(1≤m≤M)的優化問題。

  • 負梯度拟合

在上一節中,我們介紹了GBDT的基本思路,但是沒有解決損失函數拟合方法的問題。針對這個問題,大牛Freidman提出了用損失函數的負梯度來拟合本輪損失的近似值,進而拟合一個CART回歸樹。第t輪的第i個樣本的損失函數的負梯度表示為

GBDT(梯度提升決策樹)算法梳理

利用(xi,rti)(i=1,2,..m)(xi,rti)(i=1,2,..m),我們可以拟合一顆CART回歸樹,得到了第t顆回歸樹,其對應的葉節點區域Rtj,j=1,2,...,JRtj,j=1,2,...,J。其中J為葉子節點的個數。

針對每一個葉子節點裡的樣本,我們求出使損失函數最小,也就是拟合葉子節點最好的的輸出值ctjctj如下:

GBDT(梯度提升決策樹)算法梳理

這樣我們就得到了本輪的決策樹拟合函數如下:

GBDT(梯度提升決策樹)算法梳理

進而本輪最終得到的強學習器的表達式如下:

GBDT(梯度提升決策樹)算法梳理

通過損失函數的負梯度來拟合,我們找到了一種通用的拟合損失誤差的辦法,這樣無輪是分類問題還是回歸問題,我們通過其損失函數的負梯度的拟合,就可以用GBDT來解決我們的分類回歸問題。差別僅僅在于損失函數不同導緻的負梯度不同而已。

  • 損失函數

損失函數:

GBDT(梯度提升決策樹)算法梳理

具體地,每步隻需優化如下損失函數:

GBDT(梯度提升決策樹)算法梳理

這裡我們再對常用的GBDT損失函數做一個總結。

對于分類算法,其損失函數一般有對數損失函數和指數損失函數兩種:

    a) 如果是指數損失函數,則損失函數表達式為

L(y,f(x))=exp(−yf(x))L(y,f(x))=exp(−yf(x))

    其負梯度計算和葉子節點的最佳負梯度拟合參見Adaboost原理篇。

    b) 如果是對數損失函數,分為二進制分類和多元分類兩種,參見4.1節和4.2節。

    

  • 回歸

輸入是訓練集樣本T={(x,y1),(x2,y2),...(xm,ym)}T={(x,y1),(x2,y2),...(xm,ym)}, 最大疊代次數T, 損失函數L。

輸出是強學習器f(x)

1) 初始化弱學習器

 2) 對疊代輪數t=1,2,...T有:

          a)對樣本i=1,2,...m,計算負梯度

          b)利用(xi,rti)(i=1,2,..m)(xi,rti)(i=1,2,..m), 拟合一顆CART回歸樹,得到第t顆回歸樹,其對應的葉子節點區域為Rtj,j=1,2,...,JRtj,j=1,2,...,J。其中J為回歸樹t的葉子節點的個數。

         c) 對葉子區域j =1,2,..J,計算最佳拟合值

         d) 更新強學習器

3) 得到強學習器f(x)的表達式

  • 二分類,多分類

這裡我們再看看GBDT分類算法,GBDT的分類算法從思想上和GBDT的回歸算法沒有差別,但是由于樣本輸出不是連續的值,而是離散的類别,導緻我們無法直接從輸出類别去拟合類别輸出的誤差。

為了解決這個問題,主要有兩個方法,一個是用指數損失函數,此時GBDT退化為Adaboost算法。另一種方法是用類似于邏輯回歸的對數似然損失函數的方法。也就是說,我們用的是類别的預測機率值和真實機率值的差來拟合損失。本文僅讨論用對數似然損失函數的GBDT分類。而對于對數似然損失函數,我們又有二進制分類和多元分類的差別。

  • 正則化

和Adaboost一樣,我們也需要對GBDT進行正則化,防止過拟合。GBDT的正則化主要有三種方式。

    第一種是和Adaboost類似的正則化項,即步長(learning rate)。定義為νν,對于前面的弱學習器的疊代

的取值範圍為0<ν≤10<ν≤1。對于同樣的訓練集學習效果,較小的νν意味着我們需要更多的弱學習器的疊代次數。通常我們用步長和疊代最大次數一起來決定算法的拟合效果。

    第二種正則化的方式是通過子采樣比例(subsample)。取值為(0,1]。注意這裡的子采樣和随機森林不一樣,随機森林使用的是放回抽樣,而這裡是不放回抽樣。如果取值為1,則全部樣本都使用,等于沒有使用子采樣。如果取值小于1,則隻有一部分樣本會去做GBDT的決策樹拟合。選擇小于1的比例可以減少方差,即防止過拟合,但是會增加樣本拟合的偏差,是以取值不能太低。推薦在[0.5, 0.8]之間。

    使用了子采樣的GBDT有時也稱作随機梯度提升樹(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采樣,程式可以通過采樣分發到不同的任務去做boosting的疊代過程,最後形成新樹,進而減少弱學習器難以并行學習的弱點。

  • 優缺點

GBDT主要的優點有:

    1) 可以靈活處理各種類型的資料,包括連續值和離散值。

    2) 在相對少的調參時間情況下,預測的準确率也可以比較高。這個是相對SVM來說的。

    3)使用一些健壯的損失函數,對異常值的魯棒性非常強。比如 Huber損失函數和Quantile損失函數。

GBDT的主要缺點有:

    1)由于弱學習器之間存在依賴關系,難以并行訓練資料。不過可以通過自采樣的SGBT來達到部分并行。

  • sklearn參數

略:後面再補上

  • 應用場景

略:後面再補上

參考連結:

  1. https://blog.csdn.net/yc1203968305/article/details/78171464
  2. https://www.cnblogs.com/pinard/p/6140514.html

繼續閱讀