XGBoost(eXtreme Gradient Boosting)算法近年來在各種比賽中可謂是「香餑餑」,預測性能很好。下面我們就來介紹它的原理。
原理
首先,我們要了解的是,XGBoost是GBDT算法的一種改進。
在進行第k輪的迭代時,GBDT的損失函數可記為L(y,F[k](x))。那麼它在F[k-1](x)處的二階泰勒展開式為
根據前向分布算法,我們有
將上式代入剛才的損失函數,再令a等於一階導,b等於2階導,則損失函數可寫為
其中,a和b分別是
那麼,對於所有的樣本而言,其損失函數為
對上式的優化,可以等價於優化
具體原因我們在介紹AdaBoost算法時已經介紹過,這裡不再贅述。
正則化
為了防止過擬合,我們在優化損失函數時,往往要給其添加一個正則化項。
那麼,添加了正則化項的損失函數為
在上一篇,我們介紹過
而正則化項由如下的公式構成
其中,M是葉子節點的個數,α和β都是正則化項的參數,用來控制模型的複雜度。
將(3)(4)式代入(2)式,可得
要想求得(5)式的最小值,我們需要對c[m]求偏導,即
然後令(6)式為0,可得
接下來,我們再把(7)式反代回(5)式,可以得到損失函數L為
(8)式就是第k輪所得到的損失函數。
回顧整個過程,我們發現,其實XGBoost就是將損失函數進行二階泰勒展開後,求得一個解,然後將其反帶入損失函數。換句話說,就是用這個解來幫助構造其中的決策樹,從而使殘差和最小,模型性能達到最優。