GBDT--原來是這麼回事(附代碼)

1. 解釋一下GBDT算法的過程

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升決策樹,使用的是Boosting的思想。

1.1 Boosting思想

Boosting方法訓練基分類器時採用串行的方式,各個基分類器之間有依賴。它的基本思路是將基分類器層層疊加,每一層在訓練的時候,對前一層基分類器分錯的樣本,給予更高的權重。測試時,根據各層分類器的結果的加權得到最終結果。

Bagging與Boosting的串行訓練方式不同,Bagging方法在訓練過程中,各基分類器之間無強依賴,可以進行並行訓練。

1.2 GBDT原來是這麼回事

GBDT的原理很簡單,就是所有弱分類器的結果相加等於預測值,然後下一個弱分類器去擬合誤差函數對預測值的殘差(這個殘差就是預測值與真實值之間的誤差)。當然了,它裏面的弱分類器的表現形式就是各棵樹。

舉一個非常簡單的例子,比如我今年30歲了,但計算機或者模型GBDT並不知道我今年多少歲,那GBDT咋辦呢?

  • 它會在第一個弱分類器(或第一棵樹中)隨便用一個年齡比如20歲來擬合,然後發現誤差有10歲;
  • 接下來在第二棵樹中,用6歲去擬合剩下的損失,發現差距還有4歲;
  • 接着在第三棵樹中用3歲擬合剩下的差距,發現差距只有1歲了;
  • 最後在第四課樹中用1歲擬合剩下的殘差,完美。
  • 最終,四棵樹的結論加起來,就是真實年齡30歲(實際工程中,gbdt是計算負梯度,用負梯度近似殘差)。

爲何gbdt可以用用負梯度近似殘差呢?

迴歸任務下,GBDT 在每一輪的迭代時對每個樣本都會有一個預測值,此時的損失函數爲均方差損失函數,

l(yi,yi)=12(yiyi)2l(y_i,y^i)=\frac{1}{2}(y_i-y^i)^2

那此時的負梯度是這樣計算的

[l(yi,yi)yi]=(yiyi)-[\frac{\partial l(y_i,y^i)}{\partial y^i}]=(y_i-y^i)

所以,當損失函數選用均方損失函數是時,每一次擬合的值就是(真實值 - 當前模型預測的值),即殘差。此時的變量是yiy^i,即“當前預測模型的值”,也就是對它求負梯度。

訓練過程

簡單起見,假定訓練集只有4個人:A,B,C,D,他們的年齡分別是14,16,24,26。其中A、B分別是高一和高三學生;C,D分別是應屆畢業生和工作兩年的員工。如果是用一棵傳統的迴歸決策樹來訓練,會得到如下圖所示結果:

現在我們使用GBDT來做這件事,由於數據太少,我們限定葉子節點做多有兩個,即每棵樹都只有一個分枝,並且限定只學兩棵樹。我們會得到如下圖所示結果:

在第一棵樹分枝和圖1一樣,由於A,B年齡較爲相近,C,D年齡較爲相近,他們被分爲左右兩撥,每撥用平均年齡作爲預測值。

  • 此時計算殘差(殘差的意思就是:A的實際值 - A的預測值 = A的殘差),所以A的殘差就是實際值14 - 預測值15 = 殘差值-1。
  • 注意,A的預測值是指前面所有樹累加的和,這裏前面只有一棵樹所以直接是15,如果還有樹則需要都累加起來作爲A的預測值。

然後拿它們的殘差-1、1、-1、1代替A B C D的原值,到第二棵樹去學習,第二棵樹只有兩個值1和-1,直接分成兩個節點,即A和C分在左邊,B和D分在右邊,經過計算(比如A,實際值-1 - 預測值-1 = 殘差0,比如C,實際值-1 - 預測值-1 = 0),此時所有人的殘差都是0。殘差值都爲0,相當於第二棵樹的預測值和它們的實際值相等,則只需把第二棵樹的結論累加到第一棵樹上就能得到真實年齡了,即每個人都得到了真實的預測值。

換句話說,現在A,B,C,D的預測值都和真實年齡一致了。Perfect!

  • A: 14歲高一學生,購物較少,經常問學長問題,預測年齡A = 15 – 1 = 14
  • B: 16歲高三學生,購物較少,經常被學弟問問題,預測年齡B = 15 + 1 = 16
  • C: 24歲應屆畢業生,購物較多,經常問師兄問題,預測年齡C = 25 – 1 = 24
  • D: 26歲工作兩年員工,購物較多,經常被師弟問問題,預測年齡D = 25 + 1 = 26

所以,GBDT需要將多棵樹的得分累加得到最終的預測得分,且每一次迭代,都在現有樹的基礎上,增加一棵樹去擬合前面樹的預測結果與真實值之間的殘差。

2. 梯度提升和梯度下降的區別和聯繫是什麼?

下表是梯度提升算法和梯度下降算法的對比情況。可以發現,兩者都是在每 一輪迭代中,利用損失函數相對於模型的負梯度方向的信息來對當前模型進行更 新,只不過在梯度下降中,模型是以參數化形式表示,從而模型的更新等價於參 數的更新。而在梯度提升中,模型並不需要進行參數化表示,而是直接定義在函 數空間中,從而大大擴展了可以使用的模型種類。

3. GBDT的優點和侷限性有哪些?

3.1 優點

  1. 預測階段的計算速度快,樹與樹之間可並行化計算。
  2. 在分佈稠密的數據集上,泛化能力和表達能力都很好,這使得GBDT在Kaggle的衆多競賽中,經常名列榜首。
  3. 採用決策樹作爲弱分類器使得GBDT模型具有較好的解釋性和魯棒性,能夠自動發現特徵間的高階關係,並且也不需要對數據進行特殊的預處理如歸一化等。

3.2 侷限性

  1. GBDT在高維稀疏的數據集上,表現不如支持向量機或者神經網絡。
  2. GBDT在處理文本分類特徵問題上,相對其他模型的優勢不如它在處理數值特徵時明顯。
  3. 訓練過程需要串行訓練,只能在決策樹內部採用一些局部並行的手段提高訓練速度。

4. RF(隨機森林)與GBDT之間的區別與聯繫

相同點

都是由多棵樹組成,最終的結果都是由多棵樹一起決定。

不同點

  • 組成隨機森林的樹可以分類樹也可以是迴歸樹,而GBDT只由迴歸樹組成
  • 組成隨機森林的樹可以並行生成,而GBDT是串行生成
  • 隨機森林的結果是多數表決表決的,而GBDT則是多棵樹累加之和
  • 隨機森林對異常值不敏感,而GBDT對異常值比較敏感
  • 隨機森林是減少模型的方差,而GBDT是減少模型的偏差
  • 隨機森林不需要進行特徵歸一化。而GBDT則需要進行特徵歸一化

5. 代碼實現

GitHub:https://github.com/NLP-LOVE/ML-NLP/blob/master/Machine%20Learning/3.2%20GBDT/GBDT_demo.ipynb

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此項目!qq羣號:【541954936】NLP面試學習羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章