XGBoost
xgboost也是使用提升樹相同的前向分步算法。其區別在於:xgboost通過結構風險極小化來確定下一個決策參數Θm
Θ^m=argΘmmini=1∑NL(y~i,fm(xi))+Ω(hm(x))
其中Ω(hm)爲第m個決策樹的正則化項。這是xgboost和GBT的一個重要區別。
L=∑i=1NL(y~i,fm(xi))+Ω(hm(x))爲目標函數
泰勒展開式
定義:
y^i<m−1>=fm−1(xi),gi=∂y^i<m−1>∂L(y~i,y^i<m−1>),hi=∂2y^i<m−1>∂2L(y~i,y^i<m−1>)
即:
gi爲L(y~i,y^i<m−1>)在y^i<m−1>的一階導數
hi爲L(y~i,y^i<m−1>)在y^i<m−1>的二階導數
對目標函數L執行二階泰勒展開:
L=i=1∑NL(y~i,fm(xi))+Ω(hm(x))=i=1∑NL(y~i,y^i<m−1>+hm(xi))+Ω(hm(x))≃i=1∑N[L(y~i,y^i<m−1>)+gihm(xi)+21hihm2(xi)]+Ω(hm(x))+ constant
決策樹改寫
對一個決策樹hm(x)假設不考慮複雜的推到過程,僅考慮決策樹的效果
給定輸入x該決策樹將該輸入經過不斷的劃分,最終劃分到某個葉結點上去。
給定一個葉節點,該葉節點有一個輸出值
因此將決策樹拆分成結構部分q(),和葉節點權重部分w=(w1,w2,...wT),其中T爲葉節點的數量
結構部分q(x)的輸出是葉節點編號d。它的作用是將輸入的x映射到編號爲d的葉節點
葉節點權重部分就是每個葉節點的值。它的作用是輸出編號爲d的葉節點的值wd
因此決策樹改寫爲hm(x)=wq(x)
結構分
定義出具體的正則項
定義一個決策樹的複雜度爲Ω(hm(x))=γT+21λ∑j=1Twj2
其中:T爲葉節點的個數,wj爲每個葉節點的輸出值,γ,λ≥0爲係數,控制這兩個部分的比重。
葉節點越多,則決策樹越複雜
每個葉節點輸出值的絕對值越大,則決策樹越複雜。
L≃i=1∑N[giwq(xi)+21hiwq(xi)2]+γT+21λj=1∑Twj2+ constant
對於每個樣本xi,它必然被劃分到樹hm的某個葉節點。定義劃分到葉節點j的樣本的集合爲:Ij={i∣q(xi)=j},則有:
L≃j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i∈Ij∑hi+λ⎠⎞wj2⎦⎤+γT+ constant
進一步化簡
定義Gj=∑i∈Ijgi,Hj=∑i∈Ijhi
Gj刻畫了隸屬於葉節點j的那些樣本的一階偏導數之和
Hj刻畫了隸屬於葉節點j的那些樣本的二階偏導數之和
L≃j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i∈Ij∑hi+λ⎠⎞wj2⎦⎤+γT+ constant
轉化爲
L≃j=1∑T[Gjwj+21(Hj+λ)wj2]+γT+ constant
此時如果wj和T,GJ,Hj都無關的話,那麼損失函數實質上是一個關於wj的一元二次方程
對於一元二次方程ax2+bx+c=0當x= -b/2a時去極值,因而有wj∗=−Hj+λGj
帶回原式可得
L∗=−21j=1∑THj+λGj2+γT
上一步的簡化,wj和T,Gj,Hj都無關,wj表示樹的葉子節點,所以實質是在假設已知樹的結構,而事實上損失函數與T是相關的,甚至和樹的結構相關,所以定義L*爲一種scoring function,來衡量已知樹結構情況下目標函數的最小值。