天天看点

倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?

作者介绍:laurae ,数据科学爱好者

blog:https://medium.com/@laurae2

背景知识:

xgboost是一款经过优化的分布式梯度提升(gradient boosting)库,具有高效,灵活和高可移植性的特点。基于梯度提升框架,xgboost实现了并行方式的决策树提升(tree boosting),从而能够快速准确地解决各种数据科学问题。

lightgbm(light gradient boosting machine)同样是一款基于决策树算法的分布式梯度提升框架。

这篇博客是关于lightgbm 和xgboost 的对比。实验使用了定制的博世数据集,结果显示,在速度上xgboost 比lightgbm在慢了10倍,而我们还需要做一些其它方面的比较。

首先让我们来看一下这个图表,所有人都应该打起精神!!!

倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?

从图上我们可以看到,平均来说,lightgbm 比xgboost 快11到15倍。

我们也注意到,随着线程数的增加,比率变小了。这也很容易解释,因为你不可能让线程的利用率是100%,线程的切入切出以及线程有时要等待,这都需要耗费很多时间。

我们来看一下前12个线程。

倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?
倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?

从表中,我们可以看到,当线程数超过6的时候xgboost的性能得到了很大的提升(当线程数是12的时候,消耗时长从577.9降低到414.3秒,大约提高了28.3%)。

对于lightgbm来说是否也是这样呢?时间从45.1降低到了33.6秒,性能提高大约25.5%。

小结:使用所有逻辑核心进行线程化,这能极大地提高性能。 如果你希望你的机器学习训练速度提高25%(显然,根据cpu的不同,情况也不完全一样),你现在知道该做什么:使用逻辑核心,而不是物理核心来创建线程。

那么13-24个线程又会怎么样呢?我们增加12个线程作为参照。

倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?
倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?

我们可以注意到:

对于xgboost来说并没有提升,数值的变化基本可以看成是误差

对于lightgbm来说反而耗时更长,从33.6秒提高到38秒以上

所以我们可以简单的下一个结论:不要过度分配逻辑内核,这不是一个好的做法。保持使用逻辑核心创建一定量的线程,并且不要超过该数。

倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?

在创建矩阵后使用gc方法两次来快速查看ram使用情况,具体情况如下:

倚天遇到屠龙:LightGBM VS xgboost谁才是最强的梯度提升库?

初始数据(密集,未使用):约8,769 mb(27.9%vs原始版本)

原始数据(dgcmatrix):大约 2,448 mb(100%vs原始版本)

xgboost(xgb.dmatrix):大约 1,701 mb(69.5%vs原始版本)

lightgbm(lgb.dataset):大约2,512 mb(102.6%vs原始版本)

看来lightgbm具有比xgboost更高的内存占用。

我们使用12个线程来检查ram效率,在50次boosting迭代结束时,在boosting之前使用gc,boosting之后不使用gc,效果如下:

xgboost:约 1684 mb

lightgbm: 1425 mb(xgboost内存使用量的84.6%)

我们可以注意到,lightgbm在训练期间的ram使用率较低,但是内存中数据的ram使用量增加。 所以r语言的lightgbm包有改进的潜能,以具有更有效的方式来存储数据。

当xgboost的快速直方图方法启动并在r语言中可用时,我们会使用新的指标。虽然它目前正在运行,但在r语言中不可用。这样一来xgboost和lightgbm孰优孰劣到时就会揭晓。

当然,未来我们也会比较xgboost和lightgbm之间的对数损失。

<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?usercode=lwju78qa&amp;utm_source=lwju78qa">数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!</a>

以上为译文

文章原标题《<b>benchmarking lightgbm: how fast is lightgbm vs xgboost?</b>》,作者:laurae,译者:爱小乖