1、模型思想
XGBoost是GBDT改良版,都是通過多個弱學習器,不斷地減少殘差。GBDT主要是對殘差求一階導,向負梯度的方向擬合殘差,而XGBoost運用了泰勒展開,考慮到了二階導數。
2、公式推導
每次的迭代都是前面的弱學習器組合上新的學習器,表示爲:
ŷ (t)i=ŷ (t−1)i+ft(xi)
目標函數可以表示爲:
loss=∑i=1nl(yi,ŷ (t−1)i+ft(xi))+Ω
其中
Ω 是正則項,爲了防止過擬合,對樹的數量和葉子結點的指加入了懲罰項:
Ω=γT+12λ∑j=1Tw2j
將
l(yi,ŷ (t−1)i) 看作是
x ,
ft(xi) 看作是
Δx ,對損失函數進行泰勒展開:
loss≈∑i=1N[l(yi,ŷ (t−1)i)+gift(xi)+12hif2t(xi)]+Ω
其中
gi 和
hi 分別是一階導和二階導,這個導數取決於選擇什麼損失函數,例如MAE,MSE。
l(yi,ŷ (t−1)i) 這一項,是由前面的弱學習器組成,不會發生改變,可以看成常數項,然後損失函數可以變成:
loss≈∑i=1N(gift(xi)+12hif2t(xi))+γT+12λ∑j=1Tw2j
1到N是遍歷樣本,比較繁瑣,把遍歷樣本轉化爲遍歷葉子節點,損失函數變成:
loss≈∑i=1T[Giwi+12(Hi+λ)w2i]+γT
其中
Gi 和
Hi 分別是這個葉子節點上所有數據的loss的一階導數和二階導數的和。
然後目標函數對
wi 求偏導數,讓偏導數爲0可以解除每個樹葉節點的值
wi :
∂loss∂wi=−12∑i=1TG2jHj+λ+γT=0
解得:
wi=−GjHj+λ
迴帶得到損失函數是:
loss=−12∑i=1TG2iH2i+λ+γT
與AdaBoost不同的是,AdaBoost基分類器用的是CART決策樹,分隔的標準是gini係數,XGBoost則是用這個推出來的損失函數進行分隔。
讓這個損失函數下降越多越好,也就是
G2H+λ 越大越好,所以XGBoost的信息增益是:
Gain=12[G2LHL+λ+G2RHR+λ−(GL+GR)2HL+HR+λ]−γ
因爲每次分隔會多出一個樹,所以要減去
γ 。