XGBoost, LightGBM性能大對比

前言

武林至尊,寶刀屠龍,號令天下,莫敢不從!倚天不出,誰與爭鋒?想要在Kaggle這樣一個擁有來自全世界超過5萬數據科學家參與的數據科學競賽拔得頭籌,什麼工具才能稱作是屠龍刀和倚天劍呢?在當今的數據科學江湖中,XGBoost作為多個Kaggle冠軍的首選工具,當之無愧擁有屠龍刀的稱號。而開源剛2個月的LightGBM以其輕快敏捷而著稱,成為了Kaggle冠軍手中的倚天劍。接下來,筆者就以Kaggle的Allstate Claims Severity競賽來跟大家分享一下這兩個工具的使用經驗。

屠龍刀——XGBoost

XGBoost作為一款經過優化的分散式梯度提升(Gradient Boosting)庫,具有高效,靈活和高可移植性的特點。基於梯度提升框架,XGBoost實現了並行方式的決策樹提升(Tree Boosting),從而能夠快速準確地解決各種數據科學問題。XGBoost不僅支持各種單機操作系統(如:Windows,Linus和OS X),而且支持集群分散式計算(如:AWS,GCE,Azure和Yarn)和雲數據流系統(如:Flink和Spark)。

XGBoost是由華盛頓大學(University of Washington)的陳天奇作為 Distributed (Deep) Machine Learning Community (DMLC) 組員所開發的一個研究項目。在陳天奇與隊友一起贏得了Higgs Machine Learning Challenge後,許多的數據科學競賽隊伍使用XGBoost並獲得了冠軍,促進了該工具在數據科學應用中的廣泛使用。

倚天劍——LightGBM

LightGBM(Light Gradient Boosting Machine)同樣是一款基於決策樹演算法的分散式梯度提升框架。為了滿足工業界縮短模型計算時間的需求,LightGBM的設計思路主要是兩點:1. 減小數據對內存的使用,保證單個機器在不犧牲速度的情況下,儘可能地用上更多的數據;2. 減小通信的代價,提升多機並行時的效率,實現在計算上的線性加速。由此可見,LightGBM的設計初衷就是提供一個快速高效、低內存佔用、高準確度、支持並行和大規模數據處理的數據科學工具。

LightGBM是微軟旗下的Distributed Machine Learning Toolkit (DMKT)的一個項目,由2014年首屆阿里巴巴大數據競賽獲勝者之一柯國霖主持開發。雖然其開源時間才僅僅2個月,但是其快速高效的特點已經在數據科學競賽中嶄露頭角。Allstate Claims Severity競賽中的冠軍解決方案里就使用了LightGBM,並對其大嘉讚賞。

屠龍刀VS倚天劍

首先談談他們的相同之處。簡單來說,XGBoost和LightGBM都是基於決策樹提升(Tree Boosting)的工具,都擁有對輸入要求不敏感、計算複雜度不高和效果好的特點,適合在工業界中進行大量的應用。

其不同之處在於:XGBoost作為屠龍刀,剛勁有力,無堅不摧;LightGBM作為倚天劍,劍如飛風,唯快不破。

  • 決策樹演算法

XGBoost使用的是pre-sorted演算法,能夠更精確的找到數據分隔點;LightGBM使用的是histogram演算法,佔用的內存更低,數據分隔的複雜度更低。

  • 決策樹生長策略

XGBoost採用的是level(depth)-wise生長策略,如Figure 1所示,能夠同時分裂同一層的葉子,從而進行多線程優化,不容易過擬合;但不加區分的對待同一層的葉子,帶來了很多沒必要的開銷。

Figure 1 Level-wise生長策略

LightGBM採用leaf-wise生長策略,如Figure 2所示,每次從當前所有葉子中找到分裂增益最大(一般也是數據量最大)的一個葉子,然後分裂,如此循環;但會生長出比較深的決策樹,產生過擬合。

Figure 2Leaf-wise生長策略

  • 網路通信優化

XGBoost由於採用pre-sorted演算法,通信代價非常大,所以在並行的時候也是採用histogram演算法;LightGBM採用的histogram演算法通信代價小,通過使用集合通信演算法,能夠實現並行計算的線性加速。

Allstate Claims Severity競賽實踐對比

筆者對Allstate Claims Severity競賽的訓練數據的14個數值特徵進行了Box-Cox變換實現消除偏度(eliminate skewness)操作,對訓練數據的116個類別特徵分別進行了Label Encoder(LE)編碼和One Hot Encoder(OHE)編碼。經過上述處理的訓練數據集合分別為(313864,130)和(313864,1190)。針對不同編碼方式的訓練數據,筆者選取fold=4來訓練了4組不同模型參數得到的XGBoost和LightGBM模型。Table 1列出了這些模型的交叉驗證結果和計算所需時間(註:結果數值越小表示模型越準確。

通過Table 1的結果可以看出,在不考慮模型參數調優的前提下,XGBoost和LightGBM的結果準確性相差並不大,但是LightGBM的計算時間卻遠遠低於XGBoost。這完全符合LightGBM作者所提出的設計思路。

同時,參考Allstate Claims Severity競賽中的冠軍解決方案,XGBoost的單個模型最佳LeaderBoard得分為1105,而LightGBM的單個模型最佳LeaderBoard得分為1111。XGBoost的模型準確性方面仍然高於LightGBM。

XGBoost和LightGBM作為大規模並行Tree Boosting工具都能夠勝任數據科學的應用。由於XGBoost的發布時間更長,模型調優方式更成熟,在準確性方面略勝一籌。LightGBM由於剛開源才2個月,模型調優方式還在摸索階段,但其快速高效地特性已經讓大家刮目相看。

作者:朱駿霄 數據應用學院9月期學員,休斯頓大學機械工程博士


推薦閱讀:

分散式資源管理
[NIPS2012] 針對深度學習的大型分散式訓練
[DNN] 嘗試理解深度神經網路的Large-batch魔咒
鋼鐵俠3裡面的賈維斯系統是個什麼構造的?

TAG:分布式系统 | 算法与数据结构 | 算法 |