xgboost算法原理


XGBoost是2014年3月陳天奇博士提出的,是基於CART樹的一種boosting算法,XGBoost使用CART樹有兩點原因:對於分類問題,CART樹的葉子結點對應的值是一個實際的分數,而非一個確定的類別,這有利於實現高效的優化算法;XGBoost有兩個特點快和准,快一方面是並行的原因,另一方面是CART樹的計算沒有對數項。

XGBoost首先是一種基於決策樹的集成模型,假設有K棵CART樹,則集成的預測結果為:(fK代表第k顆樹的輸出結果)

 

 

XGBoost的目標優化函數定義為:

 

 

目標優化函數的第一項為訓練損失,第二項為樹模型的復雜度,也是優化函數的正則化項。Xgboost包含的CART樹的確定包括兩個部分:樹的結構、葉子節點分數,如果樹的結構確定,模型的正則化項也設為各個葉子節點值的平方和,就可以使用梯度下降或隨機梯度下降來優化目標函數。

XGboost目標函數的優化采用的是加法訓練,這是一種啟發式算法,運用加法訓練,首先優化第一棵樹,之后再優化第二棵樹,直至優化完k棵樹。

 

 

第t步時,在現有的t-1棵樹的基礎上,添加使目標函數最小的第t顆CART樹:

 

 

對於平方損失函數,目標優化函數可表示為:

 

 

對於一般的損失函數,可以對目標函數做二階泰勒展開,得到目標優化函數:

 

 

其中:

等價於平方損失函數中的:

 

 

二階泰勒展開形式:

 

 

移除常數項后,得到的近似目標優化函數為:

 

 

模型的正則化項定義為:

 

 

將正則化項代入目標優化函數得:

 

 

令:

 

 

目標函數等價於:
   

 

假設樹的結構固定,優化每個葉子節點的權重,目標函數對wj求偏導等於0可得:

 

 

XGBoost的節點切分標准定義為:

 

 

該Gain實際上是單節點的obj減去切分后的兩個子節點的obj,Gain為正,值得切分,Gain的左半部分大於g,值得切分。

Xgboost對樣本的遍歷轉化成了在葉子節點上遍歷,特征的選擇和切分可以並行實現,優於傳統的GBDT算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM