GBDT算法梳理


1.GBDT(Gradient Boosting Decision Tree)思想

  Boosting :

  給定初始訓練數據,由此訓練出第一個基學習器;
  根據基學習器的表現對樣本進行調整,在之前學習器做錯的樣本上投入更多關注;
  用調整后的樣本,訓練下一個基學習器;
  重復上述過程 T 次,將 T 個學習器加權結合。
 

  Gradient boosting

    Gradient boosting是 boosting 的其中一種方法,它主要的思想是,每一次建立單個學習器時,是在之前建立的模型的損失函數的梯度下降方向。

    我們知道損失函數(loss function)越大,說明模型越容易出錯,如果我們的模型能夠讓損失函數持續的下降,則說明我們的模型在不停的改進,而最好的方式就是讓損失函數在其梯度(Gradient)的方向上下降。

  

  GBDT

    GBDT是 GB 和 DT(Decision Tree) 的結合,就是當 GB 中的單個學習器為決策樹時的情況.決策樹分為兩大類,回歸樹和分類樹。前者用於預測實數值,如明天的溫度、用戶的年齡、網頁的相關程度;后者用於分類標簽值,如晴天/陰天/霧/雨、用戶性別、網頁是否是垃圾頁面。這里要強調的是,前者的結果加減是有意義的,如10歲+5歲-3歲=12歲,后者則無意義,如男+男+女=到底是男是女?GBDT的核心就在於,每一棵樹學的是之前所有樹結論和的殘差,這個殘差就是一個加預測值后能得真實值的累加量

  比如A的真實年齡是18歲,但第一棵樹的預測年齡是12歲,差了6歲,即殘差為6歲。那么在第二棵樹里我們把A的年齡設為6歲去學習,如果第二棵樹真的能把A分到6歲的葉子節點,那累加兩棵樹的結論就是A的真實年齡;
  如果第二棵樹的結論是5歲,則A仍然存在1歲的殘差,第三棵樹里A的年齡就變成1歲,繼續學。

    而分類樹的結果顯然是沒辦法累加的,所以GBDT中的樹都是回歸樹,這點對理解GBDT相當重要

 

 

    我們通過一張圖片,來說明gbdt的訓練過程: 

 

 

  gbdt通過多輪迭代,每輪迭代產生一個弱分類器,每個分類器在上一輪分類器的殘差基礎上進行訓練。對弱分類器的要求一般是足夠簡單,並且是低方差和高偏差的。因為訓練的過程是通過降低偏差來不斷提高最終分類器的精度,(此處是可以證明的)。

        弱分類器一般會選擇為CART TREE(也就是分類回歸樹)。由於上述高偏差和簡單的要求 每個分類回歸樹的深度不會很深。最終的總分類器 是將每輪訓練得到的弱分類器加權求和得到的(也就是加法模型)。

        模型最終可以描述為:

              

 

2.負梯度擬合

我們希望找到一個 f(x)  使得 L(y, f(x)) 最小,那么 f(x) 就得沿着使損失函數L減小的方向變化,即:

f(x_{1}) = f(x) - \frac{\partial L(y, f(x))}{\partial f(x)}

同時,最新的學習器是由當前學習器 f(x) 與本次要產生的回歸樹 T_{1}相加得到的:

f(x_{1}) = f(x) + T_{1}

因此,為了讓損失函數減小,需要令:

- \frac{\partial L(y, f(x))}{\partial f(x)} = T_{1}

即用損失函數對f(x)的負梯度來擬合回歸樹。

3.損失函數

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

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

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

        

 

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

    

    對於回歸算法,常用損失函數有如下3種:

    a)均方差,這個是最常見的回歸損失函數了

        

 

 

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

        

 

 

      對應負梯度誤差為:

        

4.回歸分類

 

 

5.多元分類

 

        

        對於上式,我曾詳細地推導過一次,大家可以看這里-->  深度學習數學推導之Sigmoid,Softmax,Cross-entropy

 

 

 

6.正則化

  我們需要對GBDT進行正則化,防止過擬合。GBDT的正則化主要有三種方式。

    1) 第一種是步長(learning rate)。定義為,對於前面的弱學習器的迭代

                                              

 

      如果我們加上了正則化項,則有

 

     的取值范圍為

     對於同樣的訓練集學習效果,較小的意味着我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定算法的擬合效果。

 

       2)第二種是對於弱學習器即CART回歸樹進行正則化剪枝。

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

 

7.優缺點

  GBDT主要的優點有:

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

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

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

  GBDT的主要缺點有:

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

8.sklearn參數

sklearn.ensemble.GradientBoostingRegressor(                 loss='ls',      ##默認ls損失函數'ls'是指最小二乘回歸lad'(最小絕對偏差)'huber'是兩者的組合
                n_estimators=100, ##默認100 回歸樹個數 弱學習器個數
                learning_rate=0.1,  ##默認0.1學習速率/步長0.0-1.0的超參數 每個樹學習前一個樹的殘差的步長
                max_depth=3,   ## 默認值為3每個回歸樹的深度 控制樹的大小 也可用葉節點的數量max leaf nodes控制
                 subsample=1,  ##用於擬合個別基礎學習器的樣本分數 選擇子樣本<1.0導致方差的減少和偏差的增加
                min_samples_split=2, ##生成子節點所需的最小樣本數 如果是浮點數代表是百分比
                min_samples_leaf=1, ##葉節點所需的最小樣本數 如果是浮點數代表是百分比
                max_features=None, ##在尋找最佳分割點要考慮的特征數量auto全選/sqrt開方/log2對數/None全選/int自定義幾個/float百分比
                max_leaf_nodes=None, ##葉節點的數量 None不限數量
                min_impurity_split=1e-7, ##停止分裂葉子節點的閾值
                verbose=0,  ##打印輸出 大於1打印每棵樹的進度和性能
                warm_start=False, ##True在前面基礎上增量訓練 False默認擦除重新訓練 增加樹
                random_state=0  ##隨機種子-方便重現
)

 

9.應用場景

 GBDT幾乎可用於所有回歸問題(線性/非線性),相對logistic regression僅能用於線性回歸,GBDT的適用面非常廣。亦可用於二分類問題(設定閾值,大於閾值為正例,反之為負例)。

 

 

 

https://www.jianshu.com/p/d55f7aaac4a7

https://www.cnblogs.com/peizhe123/p/5086128.html

http://www.cnblogs.com/duan-decode/p/9889955.html

http://www.cnblogs.com/sandy-t/p/6863918.html

 

https://blog.csdn.net/qq_20412595/article/details/82589378 

 


免責聲明!

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



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