Xgboost是GB算法的高效實現,xgboost中的基學習器除了可以是CART(gbtree)也可以是線性分類器(gblinear)。
傳統GBDT以CART作為基分類器,xgboost還支持線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂回歸(分類問題)或者線性回歸(回歸問題)。
傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支持自定義代價函數,只要函數可一階和二階求導。
xgboost在代價函數里加入了正則項,用於控制模型的復雜度。正則項里包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和
列抽樣(column subsampling)。xgboost借鑒了隨機森林的做法,支持列抽樣,不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。
xgboost工具支持並行。
Shrinkage(縮減),相當於學習速率(xgboost中的eta)。xgboost在進行完一次迭代后,會將葉子節點的權重乘上該系數,主要是為了削弱每棵樹的影響,讓后面有更大的學習空間。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
xgboost相對於普通gbm的實現,可能具有以下的一些優勢:
- 顯式地將樹模型的復雜度作為正則項加在優化目標
- 公式推導里用到了二階導數信息,而普通的GBDT只用到一階
- 允許使用column(feature) sampling來防止過擬合,借鑒了Random Forest的思想,sklearn里的gbm好像也有類似實現。
4.實現了一種分裂節點尋找的近似算法,用於加速和減小內存消耗。
5.節點分裂算法能自動利用特征的稀疏性。
6.data事先排好序並以block的形式存儲,利於並行計算
7.cache-aware, out-of-core computation,這個我不太懂。。
8.支持分布式計算可以運行在MPI,YARN上,得益於底層支持容錯的分布式通信框架rabit。
1. 在Loss function中做approximate,把泰勒展開限制為1階和2階偏導,gbdt是1階;
2. penalty function Omega主要是對樹的葉子數和葉子分數做懲罰,這點確保了樹的簡單性;
3. 快,非常快,最新版本支持spark,4000多萬樣本,70個dimension,200棵樹的訓練也就1小時不到;