GBDT算法梳理


1.前向分布算法

其算法的思想是,因為學習的是加法模型,如果能夠從前往后,每一步只學習一個基函數及其系數,逐步逼近優化目標函數,那么就可以簡化優化的復雜度。 

 

 

 

 

2.負梯度擬合

對於一般的回歸樹,采用平方誤差損失函數,這時根據前向分布每次只需要達到最優化,就能保證整體上的優化。由於平方誤差的特殊性,可以推導出每次只需要擬合殘差(真實值-預測值)。

為什么采用損失函數的負梯度?

L(y,f(x))中將f(x)看成一個參數,為了使L損失函數最小,采用梯度下降的方法即:

f(x)_m=f(x)_m-1-(dL/df(x))//與一般的梯度下降法相同

而f(x)_m=f(x)_m-1+T(x;Q)//Q為前向分布法每次得到這棵樹的參數,T(x;Q)為訓練的新樹

所以有f(x)_m-1+T(x;Q)=f(x)_m-1-(dL/df(x))

所以有T(x;Q)=-(dL/df(x))

左邊為預測值,右邊為真實值,所以整個過程就變成了每次擬合損失函數的負梯度的值。

 

 

3.損失函數

這里我們再對常用的GBDT損失函數做一個總結。
1.對於分類算法,其損失函數一般有對數損失函數和指數損失函數兩種:
(1)如果是指數損失函數,則損失函數表達式為

  

 

其負梯度計算和葉子節點的最佳殘差擬合參見Adaboost原理篇。
(2)如果是對數損失函數,分為二元分類和多元分類兩種,
對於二元分類


 

 
2.對於回歸算法,常用損失函數有如下4種:
(1)均方差,這個是最常見的回歸損失函數了

 

(2)絕對損失,這個損失函數也很常見

 

 

對應負梯度誤差為:

 

(3)Huber損失,它是均方差和絕對損失的折衷產物,對於遠離中心的異常點,采用絕對損失,而中心附近的點采用均方差。這個界限一般用分位數點度量。
(4)分位數損失。它對應的是分位數回歸的損失函數。

 

 

4.回歸

輸入:訓練樣本 D={(x1,y1),(x2,y2),⋯,(xm,ym)}D={(x1,y1),(x2,y2),⋯,(xm,ym)},最大迭代次數(基學習器數量) TT,損失函數 LL
輸出:強學習器 H(x)H(x)
算法流程
Step1:初始化基學習器

 

 

Step2:當迭代次數 t=1,2,⋯,Tt=1,2,⋯,T

(1)計算 t 次迭代的負梯度

 

 

(2)利用 (xi,rti)(i=1,2,⋯,m)(xi,rti)(i=1,2,⋯,m),擬合第 t 棵CART回歸樹,其對應的葉子結點區域為 Rtj,j=1,2,⋯,JRtj,j=1,2,⋯,J。 其中 JJ 為回歸樹的葉子結點的個數
(3)對葉子結點區域 j=1,2,⋯,Jj=1,2,⋯,J,計算最佳擬合值

 


(4)更新強學習器

 


Step3:得到強學習器

 

 

 

5.二分類

對於二元GBDT,如果用類似於邏輯回歸的對數似然損失函數,則損失函數為:

 

其中,y∈{−1,+1}y∈{−1,+1}。此時的負梯度誤差是

 

對於生成的決策樹,我們各個葉子節點的最佳殘差擬合值為

 

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

 

 

除了負梯度計算和葉子節點的最佳殘差擬合的線性搜索,二元GBDT分類和GBDT回歸算法過程相同。

 

 

 

6.正則化

和Adaboost一樣,我們也需要對GBDT進行正則化,防止過擬合。GBDT的正則化主要有三種方式。
(1)第一種是和Adaboost類似的正則化項,即步長(learning rate)。定義為ν,對於前面的弱學習器的迭代

Ht(x)=Ht−1(x)+ht(x)Ht(x)=Ht−1(x)+ht(x)
如果我們加上了正則化項,則有


Ht(x)=Ht−1(x)+αht(x),0<α≤1Ht(x)=Ht−1(x)+αht(x),0<α≤1
對於同樣的訓練集學習效果,較小的ν意味着我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定算法的擬合效果。

(2)第二種正則化的方式是通過子采樣比例(subsample)。取值為(0,1]。注意這里的子采樣和隨機森林不一樣,隨機森林使用的是放回抽樣,而這里是不放回抽樣。如果取值為1,則全部樣本都使用,等於沒有使用子采樣。如果取值小於1,則只有一部分樣本會去做GBDT的決策樹擬合。選擇小於1的比例可以減少方差,即防止過擬合,但是會增加樣本擬合的偏差,因此取值不能太低。推薦在[0.5, 0.8]之間。
  使用了子采樣的GBDT有時也稱作隨機梯度提升樹(Stochastic Gradient Boosting Tree, SGBT)。由於使用了子采樣,程序可以通過采樣分發到不同的任務去做boosting的迭代過程,最后形成新樹,從而減少弱學習器難以並行學習的弱點。
  
(3)第三種是對於弱學習器即CART回歸樹進行正則化剪枝。在決策樹原理篇里我們已經講過,這里就不重復了。

 

7.優缺點

GBDT主要的優點有:
(1)可以靈活處理各種類型的數據,包括連續值和離散值。
(2)在相對少的調參時間情況下,預測的准備率也可以比較高。這個是相對SVM來說的。
(3)使用一些健壯的損失函數,對異常值的魯棒性非常強。比如 Huber損失函數和Quantile損失函數。
GBDT的主要缺點有:
(1)由於弱學習器之間存在依賴關系,難以並行訓練數據。不過可以通過自采樣的SGBT來達到部分並行。

 

8.sklearn參數

 

loss:損失函數度量,有對數似然損失deviance和指數損失函數exponential兩種,默認是deviance,即對數似然損失,如果使用指數損失函數,則相當於Adaboost模型。

criterion: 樣本集的切分策略,決策樹中也有這個參數,但是兩個參數值不一樣,這里的參數值主要有friedman_mse、mse和mae3個,分別對應friedman最小平方誤差、最小平方誤差和平均絕對值誤差,friedman最小平方誤差是最小平方誤差的近似。

subsample:采樣比例,這里的采樣和bagging的采樣不是一個概念,這里的采樣是指選取多少比例的數據集利用決策樹基模型去boosting,默認是1.0,即在全量數據集上利用決策樹去boosting。

warm_start:“暖啟動”,默認值是False,即關閉狀態,如果打開則表示,使用先前調試好的模型,在該模型的基礎上繼續boosting,如果關閉,則表示在樣本集上從新訓練一個新的基模型,且在該模型的基礎上進行boosting。

屬性/對象 

feature_importance_:特征重要性。

oob_improvement_:每一次迭代對應的loss提升量。oob_improvement_[0]表示第一次提升對應的loss提升量。

train_score_:表示在樣本集上每次迭代以后的對應的損失函數值。

loss_:損失函數。

estimators_:基分類器個數。

方法

apply(X):將訓練好的模型應用在數據集X上,並返回數據集X對應的葉指數。

decision_function(X):返回決策函數值(比如svm中的決策距離)

fit(X,Y):在數據集(X,Y)上訓練模型。

get_parms():獲取模型參數

predict(X):預測數據集X的結果。

predict_log_proba(X):預測數據集X的對數概率。

predict_proba(X):預測數據集X的概率值。

score(X,Y):輸出數據集(X,Y)在模型上的准確率。

staged_decision_function(X):返回每個基分類器的決策函數值

staged_predict(X):返回每個基分類器的預測數據集X的結果。

staged_predict_proba(X):返回每個基分類器的預測數據集X的概率結果。

 

 

9.應用場景

回歸,分類

 

 

參考資料:http://www.cnblogs.com/pinard/p/6140514.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM