XGBoost VS LightGBM

XGBoost VS 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 diflucan-fluconazole.net(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个月,模型调优方式还在摸索阶段,但其快速高效地特性已经让大家刮目相看。

 

作者:Jun Xiao Zhu