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 在每一輪的迭代時對每個樣本都會有一個預測值,此時的損失函數為均方差損失函數,
那此時的負梯度是這樣計算的
所以,當損失函數選用均方損失函數是時,每一次擬合的值就是(真實值 - 當前模型預測的值),即殘差。此時的變量是y',即“當前預測模型的值”,也就是對它求負梯度。
訓練過程
簡單起見,假定訓練集只有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 優點
- 預測階段的計算速度快,樹與樹之間可並行化計算。
- 在分布稠密的數據集上,泛化能力和表達能力都很好,這使得GBDT在Kaggle的眾多競賽中,經常名列榜首。
- 采用決策樹作為弱分類器使得GBDT模型具有較好的解釋性和魯棒性,能夠自動發現特征間的高階關系,並且也不需要對數據進行特殊的預處理如歸一化等。
3.2 局限性
- GBDT在高維稀疏的數據集上,表現不如支持向量機或者神經網絡。
- GBDT在處理文本分類特征問題上,相對其他模型的優勢不如它在處理數值特征時明顯。
- 訓練過程需要串行訓練,只能在決策樹內部采用一些局部並行的手段提高訓練速度。
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】點擊加入