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算法。
