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.負梯度擬合
我們希望找到一個 使得 最小,那麽 就得沿著使損失函數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算法梳理