一、xgboost模型函數形式
xgboost也是GBDT的一種,只不過GBDT在函數空間進行搜索最優F的時候,采用的是梯度下降法也就是一階泰勒展開;而xgboost采用的是二階泰勒展開也就是牛頓法,去每次逼近最優的F,泰勒展開越多與原函數形狀越接近,比如在x0處進行展開,其展開越多,x0附近與原函數值越接近,且這個附近的區域越大。另外一個xgboost加入了正則化項,有效防止過擬合。
xgboost與GBDT都是采用的cart樹中的回歸樹來解決所有問題,回歸樹的預測輸出是實數分數,可以用於回歸、分類、排序等任務中。對於回歸問題,可以直接作為目標值,對於分類問題,需要映射成概率,比如采用邏輯回歸的sigmoid函數。
additive表示附加的,所謂additive training,就是每次add一顆樹進行學習,直到損失最小。
誤差函數盡量去擬合訓練數據,正則化項則鼓勵更加簡單的模型。因為當模型簡單之后,有限數據擬合出來結果的隨機性比較小,不容易過擬合,使得最后模型的預測更加穩定。
二、目標函數
1)回顧傳統參數空間的目標函數
誤差函數可以是square loss,logloss等,正則項可以是L1正則,L2正則等。正則項如果從Bayes角度來看,相當於對模型參數引入先驗分布:
L1正則,模型參數服從拉普拉斯分布,對參數加了分布約束,大部分取值為0。
L2正則,模型參數服從高斯分布,對參數加了分布約束,大部分絕對值很小。
2)xgboost在函數空間搜索的目標函數
函數空間的目標函數是多棵樹一起構建的目標損失函數,求解多棵樹一起的整體最優解。
第一部分屬於誤差項,訓練模型的精度;第二部分正則項對每一棵回歸樹的復雜度進行了懲罰,使得學習出來的模型不容易過擬合。
哪些指標可以衡量樹的復雜度呢?
樹的深度,內部節點個數,葉子節點個數,葉子節點分數等。
xgboost采用葉子節點個數T和葉子節點分數w(其實就是預測值)對樹的復雜度進行約束:
對葉子節點個數進行懲罰,相當於進行了剪枝。
三、泰勒展開
基本形式:
一階與二階泰勒展開:
1)一階泰勒展開(梯度下降法)
在機器學習任務中,需要最小化損失函數L(θ) ,其中θ 是要求解的模型參數。梯度下降法常用來求解這種無約束最優化問題,它是一種迭代方法:選取初值 θ0,不斷迭代,更新θ的值,進行損失函數的極小化。
從上面可知,當△θ=-αL丶(θt-1)時候,θ的更新就跟我們之前理解的梯度下降方法是一摸一樣。將△θ帶入損失函數即可知,這個時候L(θt)是肯定比L(θt-1)變小的。
所以,從梯度下降法角度理解,就是函數值沿着梯度的負方向進行減少;從泰勒展開角度理解,就是函數在θt-1處進行一階展開,並根據展開公式找到了比L(θt-1)更小的近似於L(θt)的值,因為泰勒展開本身就是用多項式形式近似表達函數的原形式。
2)二階泰勒展開(牛頓法)
此時如何進行優化,尋找更小的L(θt)?
這時候利用泰勒二階展開求解最優的△θ,使得L(θt)更小,泰勒二階比一階肯定更接近原函數的值,所求得的△θ也使得L(θt)下降的更快,這就是牛頓法的優勢。
四、xgboost目標函數進行泰勒展開
xgboost在第t次迭代后,模型的預測等於前t-1次的模型預測加上第t棵樹的預測:
由於模型已經進行了t-1次迭代,也就是已經學習了t-1棵樹,此時只要學習尋找最優的第t棵樹函數ft即可,所以目標函數如下:
其中yi和yi(t-1)都屬於已知的,可以理解為常數。
將目標函數在yi(t-1)處進行泰勒二次展開,因為我們一步步尋找的是最優的函數yi(t)使得L最小,就是上面所說的在函數空間進行的搜索,所以在yi(t-1)處進行泰勒二次展開尋找並學習下一顆樹ft,這里的ft其實就相當於上文第三部門牛頓法中的△θ,不停的尋找ft,最后將這些樹加起來就成了最優的yt,上文中也是不停的尋找△θ,最后θ*=θ0+Σ△θ,一樣的道理。無非一個是在參數空間進行搜索,一個是在函數空間進行搜索。二次展開如下:
其中gi和hi分布如下:
將常數項去掉,並把樹的結構形式帶入得到如下:
其實這個時候已經簡潔地變成對t棵樹的學習優化問題了,以葉子節點形式表示上述目標函數如下,其中Ij={i|q(xi)=j}表示j葉子節點上的樣本集合。
為了使目標函數最小,可以令其導數為0,解得每個葉節點的最優預測分數為:
帶入目標函數,得到最小損失為:
五、如何進行分裂?
1)如何評測節點分裂的優劣?
ID3采用信息增益來評測,C4.5采用信息增益率、CART樹采用基尼系數和平方損失來評測,xgboost采用如下的打分評測:
其實就是上面的最小損失值的公式,如果分裂后能讓損失變得更小,就值得去分裂,所以分裂前后增益定義為:
這個Gain就是分裂前的損失-分裂后的損失,差值越大,代表分裂后的損失越小,所以當對一個節點進行分裂時,計算所有候選(feature,value)對應的gain,選區gain最大的進行分裂。
2)尋找分裂節點
1、精確算法-暴力窮舉搜索法
遍歷所有特征的所有可能的分割點,計算gain值,選取gain值最大的(feature,value)去分割。該方式優點是精度高,缺點是計算量太大。
2、近似算法-分位點分割
對於某一個特征,按照百分比確定候選分裂點,通過遍歷所有特征的所有候選分裂點來找到最佳分裂點,減少了計算復雜度。
3.weighted quantile sketch(按權重的分位點算法)
該方法將樣本對應的殘差二階導h作為划分依據,假設每一個分位點區間的h之和占總h的比率為rk(z),則兩個相鄰區間的rk之差小於一個固定值,如下所示:

