1. 程式人生 > 實用技巧 >【資料探勘】GBDT,XGBoost

【資料探勘】GBDT,XGBoost

小白學資料,只為記錄學習程序,對每個問題有新的理解會及時更正。

兩個模型都是基於Boosting的思想,採用串聯的方法來提升預測的精度

一、GBDT
GBDT採用的弱學習器是CART迴歸決策樹,所以,首先學習一下CART迴歸決策樹的知識
假設有 N 個樣本,每個樣本有 J 個屬性
1.對每個樣本的y值進行從小到大的排序,然後取相鄰兩個值的均值作為分割點
2.計算分割後,左右兩個葉子的誤差之和:
在這裡插入圖片描述
其中c1是左邊葉子節點的y的預測值的均值,c2是右邊葉子節點的y的預測值的均值,計算出每個劃分點的均方誤差的值,取均方誤差最小的那個分割點,作為這個屬性的最佳分割點。
3.遍歷每個屬性,取均方誤差最小對應的屬性為第一個分割點

4.對分割後的葉子節點,重複1-3的步驟,直到滿足終止條件。
5.最後得到決策樹模型:
在這裡插入圖片描述

以上便是CART迴歸樹的原理。

在知道CART迴歸樹的原理後,我們來看看GBDT的步驟:
1.先定義初始值:
在這裡插入圖片描述
2.然後計算第m步的殘差,使用負梯度來替代:
在這裡插入圖片描述
3.計算第m棵樹的每個葉子節點的值:
使用CART確定決策樹的方法
在這裡插入圖片描述
4.集合第m步的弱學習器:
在這裡插入圖片描述
5.得到最終的強學習器:
在這裡插入圖片描述
得到最終的學習器為:
在這裡插入圖片描述
這裡思考為什麼採用負梯度來替代殘差,而不是直接使用殘差來當作下一個模型的擬合目標:
在這裡插入圖片描述

二、XGBOOST
1.確定目標函式:
在這裡插入圖片描述
L(x)是誤差函式,即計算預測值和實際值之間的差值,Ω(x)是對每個模型的懲罰項。

2.迭代每一步的預測值:
在這裡插入圖片描述
因為xgboost也是採用boosting的思想,是多個弱學習器的累加。前m個弱學習器加上第m個弱學習器可以得到當前的強學習器。並把前m-1項(已知),換成常數constant。
3.利用Taylor二階展開式來展開誤差函式:
在這裡插入圖片描述

4.替換裡面的常數值,並且根據一元二次方程來求目標函式的最小值:
為了使目標函式最小,可以令其導數為0,解得每個葉節點的最優預測分數為:
在這裡插入圖片描述
帶入到原目標函式中,得到最小值:
在這裡插入圖片描述
5.決定每棵樹該怎麼構建:
思想和CART迴歸樹一樣,遍歷每一個屬性的每個分裂點,計算每個分裂點的目標函式值。
在這裡插入圖片描述
然後通過計算目標函式值的增益Gain,來選擇分裂哪個屬性(選擇Gain最大的屬性的分裂點),以及怎麼分裂

6.迴圈5的步驟,直到滿足終止條件
在這裡插入圖片描述
在這裡插入圖片描述

三、GBDT和XGBOOST的區別
1.傳統GBDT在優化時只用到一階導數資訊,xgboost則對代價函式進行了二階泰勒展開,同時用到了一階和二階導數。
2.xgboost在代價函式里加入了正則項,用於控制模型的複雜度。正則項裡包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。
3.xgboost借鑑了隨機森林的做法,支援列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性
4.對缺失值的處理。對於特徵的值有缺失的樣本,xgboost可以自動學習出它的分裂方向
5.傳統的GBDT採用CART作為基分類器,XGBoost支援多種型別的基分類器,比如線性分類器