XGBoost介紹
一.決策樹
If-Else規則的集合,將樣本遞歸地劃分到對應的子空間,實現樣本的分類。
二.信息增益和信息增益比
-
熵:
H(X)=−i=1∑npilogpi
-
信息增益:
g(D,A)=H(D)−H(D∣A)
H(D∣A)=i=1∑∣A∣∣D∣∣Di∣H(Di)
-
信息增益比
gR(D,A)=HA(D)g(D,A)
HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
-
ID3算法和C4.5算法
大同小異,使用的特徵選擇算法不同而已
三.剪枝
剪枝是通過對損失函數或代價函數進行極小化來實現的。因此,爲了實現簡化樹結構,必須增加對樹結構的懲罰項。
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣
Cα(T)=C(T)+α∣T∣
從模型複雜度與預測正確性之間做出折中。
剪枝條件:Cα(TA)≤Cα(TB) (After, Before)
四.CART算法
classification and regression tree.
迴歸樹
迴歸樹模型可表示爲:
f(x)=m=1∑McmI(x∈Rm)
用平方誤差作爲迴歸樹對訓練數據的預測誤差:
xi∈Rm∑(yi−f(xi))2
切分點確定:
遍歷切分點(j, s),最優化:
j,smin⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤
其中j
爲屬性,s
爲屬性的切分點。
分類樹
特徵選擇:基尼指數
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
仍然是每一特徵切爲二類,尋找最優切分點:
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
CART 剪枝
對CART樹而言,其模型代價函數仍可以用:
Cα(T)=C(T)+α∣T∣
來表示。那麼對於書中的某一結點t,以t爲單節點樹的損失函數爲:
Cα(t)=C(t)+α
以t爲根節點的模型子樹Tt的損失函數爲:
Cα(Tt)=C(Tt)+α∣Tt∣
當α=∣Tt∣−1C(t)−C(Tt),剪枝與不剪枝的損失函數相等,根據奧卡姆剃刀原理,此時傾向於剪枝。
其實,CART剪枝的核心思想就是根據樹的內部節點t,計算:
g(t)=∣Tt∣−1C(t)−C(Tt)
根據計算得來的各個g值,選擇不同的α值,對樹進行剪枝。最後運用交叉驗證方法選擇最優的子樹。
五.前向分步算法
前向分步算法可用加法模型進行表示:
f(x)=m=1∑Mβmb(x,γm)
在第m步,優化目標爲:
(βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ))
提升樹模型
fM(x)=m=1∑MT(x,Θm)
當使用平方損失函數時,在第m步:
L(y,fm(x))let r=y−fm−1(x)===L(y,fm−1(x)+T(x;Θm))[y−fm−1(x)−T(x;Θm)]2[r−T(x;Θm)]2
可以看出,第m步其實僅對前m-1個弱分類器預測給出的殘差做了擬合。
梯度提升樹模型
但是,當損失函數不爲平方損失時,T(x;Θm)就不能簡單地對殘差進行擬合。爲此,Freidman提出梯度提升樹算法:
rm=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
用第m個CART樹對殘差進行擬合。
六.XGBoost算法
對於一個給定的數據集(n rows, m features) D={(xi,yi)}(∣D∣=n,xi∈Rm,yi∈R), 集成樹模型使用K個加法模型預測最終的輸出:
y^i=ϕ(Xi)=k=1∑Kfk(Xi),fk∈F
在這裏,F={f(X)=ωq(X)}(q:Rm→T,ω∈RT)代表迴歸樹的空間。q即代表着將樣本劃分到對應葉子節點的樹結構;T爲樹的葉子節點數目。每一fk代表着獨立的一顆樹的結構以及權重。與決策樹不同的是,迴歸樹的每一葉子節點上包含一個連續的打分,即第i個葉子結點的打分爲ωi。
因此在Xgboost中,通過將樣本在對應葉子節點上的權值累加起來,最終給出分類結果。
XGBoost的算法過程其實就是前向分佈算法的過程,不過XGBoost提出了新的損失函數:
L(ϕ)=i∑l(y^i,yi)+k∑Ω(fk)where Ω(f)=γT+21λ∣∣ω∣∣2
將損失函數展開:
Lt=i=1∑nl(yi,y^it−1+ft(Xi))+Ω(ft)
根據泰勒展開:
f(x+Δx)=f(x)+1!f′(x)Δx+2!f′′(x)Δx2+O(Δx3)
令Δx=ft(Xi),利用二階展開,利用前t-1
步得到的模型給出的損失對第t步的損失進行逼近,得到:
Lt≈i=1∑n[l(yi,y^it−1)+gift(Xi)+21hift2(Xi)]+Ω(ft)
捨棄常數項,展開正則項:
L~t=i=1∑n[gift(Xi)+21hift2(Xi)]+γT+21λj=1∑Tωj2
將損失函數展開到葉子節點上,令Ij={i∣q(Xi)=j}:
L~t=j=1∑T[(i∈Ij∑gi)wj+21(i∈Ij∑hi+λ)wj2]+γT
令Gj=∑i∈Ijgi,Hj=∑i∈Ijhi,對以上損失函數進行求導,在導數爲零時得到損失函數極小值,求得最優權值爲:
ωj∗=−Hj+λGj
將求得的權值代入損失函數:
L~t(q)=−21j=1∑THj+λGj2+γT
所以XGBoost的切分點是通過求使得損失函數下降最大的位置得來的:
Lsplit=21[HL+λGL2+HR+λGR2−HI+λGI2]−γ