XGBoost是各種數據挖掘或機器學習算法類比賽中每個團隊都會使用且精度相對最好的算法之一(Deep Learning算法除外)。也就是說,對於剛轉向機器學習領域的同胞們,在掌握數據挖掘的基本常識概念之後,要想在比賽中有所收穫,掌握XGBoost算法也是當務之急。
1、XGBoost算法優點
XGBoost 是 Extreme Gradient Boosting的簡稱。它是Gradient Boosting Machine的一個C++實現.創建之初為受制於現有庫的計算速度和精度,XGBoost最大的特點,它能夠自動利用CPU的多線程進行並行,同時,在算法上加以改進提高了精度[1]。
傳統的GBDT(Gradient Boosted Decision Trees)模型,在1999年,由Jerome Friedman提出,最早Yahoo將GBDT模型應用於CTR預估。GBDT是一個加權回歸模型,通過Boosting迭代弱學習器,相對於LR的優勢是不需要做特徵的歸一化,可以自動進行特徵選擇,模型可解釋性較好,可以適應多種損失函數如SquareLoss,LogLoss等[2]。但作為非線性模型,其相對線性模型的缺點比較明顯,Boosting是串行的過程,不能並行化,計算複雜度較高,同時其不太適合高維稀疏特徵,通常採用稠密的數值特徵。
XGBoost不同於傳統的GBDT只利用了一階導數的信息,而XGBoost對損失函數做了二階泰勒展開,並在目標函數中加入了正則項,整體求最優解,用以權衡目標函數和模型的複雜程度,防止過擬合。
除理論與傳統GBDT存在差別外, XGBoost的設計理念主要有如下幾點優點:
速度快。讓一個程序在必要時佔領一臺機器,並且在所有迭代的時候一直跑到底,防止重新分配資源的開銷。機器內部採用單機多線程方式來並行加速,機器之間通信基於Rabit實現的All Reduce的同步接口。
可移植,少寫代碼。大多數分布式機器學習算法的結構都是分布數據,在每個子集上面算出一些局部的統計量,然後整合出全局的統計量,然後再分配給每個計算節點進行下一輪的迭代。根據算法本身的需求,抽象出合理的接口,如All Reduce,並通過通用的Rabit庫讓平臺實現接口的需求,最終使得各種比較有效的分布式機器學習抽象地實現在各個平臺上。
可容錯。Rabit版本的All Reduce有一個很好的性質,支持容錯,而傳統的MPI不支持。由於All Reduce中,每一個節點最後拿到相同的結果,這意味著可以讓一部分節點記住結果,當有節點掛掉重啟的時候,可以直接向還活著的節點索要結果。
2、XGBoost算法與目標函數
XGBoost算法是基於樹的Boosting算法,並在其優化目標函數中加了正則化項,其目標函數為
式中Lm表示第m次迭代中生成樹模型fm的葉子節點數,表示fm各個葉子節點的輸出值。和λ是正則化係數,從公式中能看出這兩個值控制著模型的複雜度和目標函數的輸出,當和λ都為零時,只含有損失函數部分,即生成樹的規模和葉子節點的輸出值不受限制。加了正則化項,使得算法會選擇簡單而性能較好的模型fm,公式中的正則化項只是抑制在迭代過程中弱學習器fm(X)過擬合,並不參與最終模型的集成。式中應至少滿足是二階連續可導的凸函數。
XGBoost算法跟Gradient Boosting算法一樣採用分步前向加性模型,區別在於,Gradient Boosting算法是學習一個弱學習器fm(X)來近似損失函數在點Pm-1=Fm-1(X)處的負梯度,而XGBoost算法是先求損失函數在該點的二階泰勒近似值,然後最小化該近似損失函數來訓練弱學習器fm(X),得到
式中
表示損失函數假設在點Pm-1(X)處的第i個分量Fm-1(xi)的一階偏導數,
為損失函數在點Pm-1(X)處的第i個分量Fm-1(xi)的二階偏導數,使用上式作為近似優化目標函數。對上式變形,得到
式中第一項在每次迭代過程中是常數,不會影響優化目標函數的結果。
3、具體代碼實例
扯了一大推理論,感覺還是來點乾貨靠譜(題外之話了,大家在應用每一個算法之前,最好理解算法的原理,這樣才能在使用算法過程中,調好算法的每一個參數)。
Python代碼:
參考文獻:
[1] Chen T, Guestrin C. Xgboost: A scalable tree boosting system[C]//Proceedings of the 22Nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016: 785-794.
[2] Friedman J H. Greedy function approximation: a gradient boosting machine[J]. Annals of statistics, 2001: 1189-1232.