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

简介: 很多人把XGBoost比作屠龙刀,LightGBM比作倚天剑,那么当倚天遇到屠龙,谁更强呢?

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


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

Blog:https://medium.com/@Laurae2

背景知识:

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

LightGBM(Light Gradient Boosting Machine)同样是一款基于决策树算法的分布式梯度提升框架。


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

总体介绍

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

033dcb69b74ffa1be54596a51cb776f1554aa126 

从图上我们可以看到,平均来说,LightGBM xgboost 1115倍。

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

1–12 个线程

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

 

04296c678bdd1d6f527eb840b8ccedfeeb2bc3f3 

bbe9864ef68879c6076afe108f4f25daf7bec1ce

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

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

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

13–24 个线程

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

4802ea5f1d0bf68333b9b0642bb0d14bdde28572 

50b38e490431168134269d53c822c88eb3d4b3d5 

我们可以注意到:

  1. 对于xgboost来说并没有提升,数值的变化基本可以看成是误差
  2. 对于LightGBM来说反而耗时更长,从33.6秒提高到38秒以上

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

LightGBM 一瞥

我们再来关注一下LightGBM的曲线。

d61006058de69f0ab285da74ab2b0ba5c57347d6 

从图上来看,这似乎是一个线性的改进:从202秒(使用1个核,1个线程),我们下降到33.6秒(6个全部使用的,12个线程),这是几乎100%的多线程的效率。 当我们用更多的线程时,多线程的效率急剧下降,使用的时间反而比一千场了

数据存储器的效率

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

68f1b59e4f846b67f861cea6fb3da3ec8e47ee95 

 

  • 初始数据(密集,未使用):约8,769 MB27.9vs原始版本)
  • 原始数据(dgCMatrix):2,448 MB100vs原始版本
  • xgboostxgb.DMatrix):大约 1,701 MB69.5vs原始版本
  • LightGBMlgb.Dataset):2,512 MB102.6vs原始版本

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

训练存储器的效率

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

xgboost:约 1684 MB

LightGBM1425 MBxgboost内存使用量的84.6%)

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

下一个指标

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

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

数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

以上为译文

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《Benchmarking LightGBM: how fast is LightGBM vs xgboost?》,作者:Laurae,译者:爱小乖

文章为简译,更为详细的内容,请查看原文


相关文章
|
Web App开发 Ubuntu Linux
ubuntu 20.04 主题美化
安装Gnome Tweaks工具和gnome扩展
|
数据安全/隐私保护 索引
基于 SpringBoot+Vue 的网上图书商城管理系统(附源码,教程)下
基于 SpringBoot+Vue 的网上图书商城管理系统(附源码,教程)
|
7月前
|
安全 Java API
JEB Pro v5.28 发布 - 逆向工程平台
JEB Pro v5.28 (macOS, Linux, Windows) - 逆向工程平台
200 6
JEB Pro v5.28 发布 - 逆向工程平台
|
10月前
|
存储 架构师 容灾
阿里云基础设施高可用最佳实践沙龙上海站圆满举办!
2025年1月9日,阿里云在上海虹桥绿地铂瑞酒店成功举办基础设施高可用最佳实践沙龙NO.2。活动吸引了华东地区多家企业的CTO、架构师和技术从业者参与。专家们分享了高可用的基础知识、分级标准及云端架构实战经验,涵盖计算、存储、网络和云原生等领域,重点讨论了企业如何在阿里云上构建高可用数据中心。现场互动热烈,参会者与专家深入交流,探讨技术应用与合作机会。
|
监控 前端开发 安全
超级炫酷的终端神器 eDEX-UI
超级炫酷的终端神器 eDEX-UI
503 0
|
存储 SQL 数据库
什么是 ACID 特性?
【8月更文挑战第3天】
980 11
什么是 ACID 特性?
|
人工智能 程序员 开发工具
『软件工程1』详解软件是什么
该文章探讨了软件工程的基本概念,包括软件的定义、特征、软件危机的原因及其应对策略等内容。
|
机器学习/深度学习 存储 数据挖掘
基于YOLOv8深度学习的生活垃圾分类目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
基于YOLOv8深度学习的生活垃圾分类目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
|
机器学习/深度学习 人工智能 安全
人工智能浪潮下的隐私保护:挑战与策略
【8月更文挑战第13天】在数字化时代,人工智能技术飞速发展,给人们的生活带来了极大的便利。然而,随之而来的个人隐私泄露问题也日益严重。本文将探讨在AI技术广泛应用的背景下,如何有效保护个人隐私,包括面临的主要挑战和可能的解决策略。
|
存储 Web App开发 缓存
软件工程高效学 | 实战案例:编写浏览器开发可行性研究报告
软件工程是计算机领域的一门专业基础课,它对于培养开发者的软件素质、提高开发者的软件开发能力与软件项目管理能力具有重要意义。本篇介绍实战案例——编写浏览器开发可行性研究报告。
608 1
软件工程高效学 | 实战案例:编写浏览器开发可行性研究报告