甲乙小朋友的房子

甲乙小朋友很笨,但甲乙小朋友不会放弃

0%

机器学习实践-XGboost与LightGBM对比

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,并对其大嘉赞赏。

Xgboost与LightGBM比较

首先谈谈他们的相同之处。简单来说,XGBoost和LightGBM都是基于决策树提升(Tree Boosting)的工具,都拥有对输入要求不敏感、计算复杂度不高和效果好的特点,适合在工业界中进行大量的应用。

其不同之处在于:XGBoost作为屠龙刀,刚劲有力,无坚不摧;LightGBM作为倚天剑,剑如飞风,唯快不破。

决策树算法

由于在决策树在每一次选择节点特征的过程中,要遍历所有的属性的所有取值并选择一个较好的。

XGBoost使用的是pre-sorted算法,能够更精确的找到数据分隔点;(xgboost的分布式实现也是基于直方图的,利于并行)

LightGBM使用的是histogram算法(类似一种分桶算法),占用的内存更低,数据分隔的复杂度更低。

而这两个算法的比较见参考文献如何看待微软新开源的LightGBM?

决策树生长策略

XGBoost采用的是level(depth)-wise生长策略,如Figure 1所示,能够同时分裂同一层的叶子,从而进行多线程优化,也好控制模型复杂度,不容易过拟合;但实际上Level-wise是一种低效的算法,它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。

LightGBM采用leaf-wise生长策略,如Figure 2所示,每次从当前所有叶子中找到分裂增益最大(一般也是数据量最大)的一个叶子,然后分裂,如此循环;但会生长出比较深的决策树,产生过拟合。

网络通信优化

XGBoost由于采用pre-sorted算法,通信代价非常大,所以在并行的时候也是采用histogram算法;LightGBM采用的histogram算法通信代价小,通过使用集合通信算法,能够实现并行计算的线性加速。

Histogram

这篇文章写的很好

https://blog.csdn.net/jasonwang_/article/details/80833001

参考文献

  1. XGBoost, LightGBM性能大对比
  2. LightGBM微软官方中文介绍