1. 程式人生 > >GBDT算法梳理

GBDT算法梳理

style loss 導致 .com -- 隨機森林 正則 lse 14.

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.負梯度擬合

我們希望找到一個 技術分享圖片 使得 技術分享圖片 最小,那麽 技術分享圖片 就得沿著使損失函數L減小的方向變化,即:

技術分享圖片

同時,最新的學習器是由當前學習器 技術分享圖片 與本次要產生的回歸樹 技術分享圖片相加得到的:

技術分享圖片

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

技術分享圖片

即用損失函數對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

GBDT算法梳理