機器學習--XGBoost

1、模型思想

XGBoost是GBDT改良版,都是通過多個弱學習器,不斷地減少殘差。GBDT主要是對殘差求一階導,向負梯度的方向擬合殘差,而XGBoost運用了泰勒展開,考慮到了二階導數。

2、公式推導

每次的迭代都是前面的弱學習器組合上新的學習器,表示爲:

y^i(t)=y^i(t1)+ft(xi)

目標函數可以表示爲:
loss=i=1nl(yi,y^i(t1)+ft(xi))+Ω

其中Ω 是正則項,爲了防止過擬合,對樹的數量和葉子結點的指加入了懲罰項:
Ω=γT+12λj=1Twj2

l(yi,y^i(t1)) 看作是xft(xi) 看作是Δx ,對損失函數進行泰勒展開:
lossi=1N[l(yi,y^i(t1))+gift(xi)+12hift2(xi)]+Ω

其中gihi 分別是一階導和二階導,這個導數取決於選擇什麼損失函數,例如MAE,MSE。
l(yi,y^i(t1)) 這一項,是由前面的弱學習器組成,不會發生改變,可以看成常數項,然後損失函數可以變成:
lossi=1Ngift(xi)+12hift2(xi))+γT+12λj=1Twj2

1到N是遍歷樣本,比較繁瑣,把遍歷樣本轉化爲遍歷葉子節點,損失函數變成:
lossi=1T[Giwi+12(Hi+λ)wi2]+γT

其中GiHi 分別是這個葉子節點上所有數據的loss的一階導數和二階導數的和。
然後目標函數對wi 求偏導數,讓偏導數爲0可以解除每個樹葉節點的值wi
losswi=12i=1TGj2Hj+λ+γT=0

解得:
wi=GjHj+λ

迴帶得到損失函數是:
loss=12i=1TGi2Hi2+λ+γT

與AdaBoost不同的是,AdaBoost基分類器用的是CART決策樹,分隔的標準是gini係數,XGBoost則是用這個推出來的損失函數進行分隔。
讓這個損失函數下降越多越好,也就是G2H+λ 越大越好,所以XGBoost的信息增益是:
Gain=12[GL2HL+λ+GR2HR+λ(GL+GR)2HL+HR+λ]γ

因爲每次分隔會多出一個樹,所以要減去γ
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章