LightGBM 与 xgboost 对比

转载自http://lightgbm.apachecn.org/cn/latest/Experiments.html#id1


实验

对比实验

详细的实验脚本和输出日志部分请参考 repo.

数据集

我们使用4个数据集进行对比实验,有关数据的细节在下表列出:

数据集任务链接训练集特征注释
Higgs二分类link10,500,00028使用余下50万个样本作为测试集
Yahoo LTR机器学习排序link473,134700set1.train为训练集,set1.test为测试集
MS LTR机器学习排序link2,270,296137{S1,S2,S3}为训练集,{S5} 为测试集
Expo二分类link11,000,000700使用余下100W个样本作为测试集
Allstate二分类link13,184,2904228使用余下100W个样本作为测试集

硬件环境

我们使用一台Linux服务器作为实验平台,具体配置如下:

OSCPUMemory
Ubuntu 14.04 LTS2 * E5-2670 v3DDR4 2133Mhz, 256GB

底层

我们使用 xgboost 作为底层算法。

并且 xgboost 和 LightGBM 都基于 OpenMP 构建。

设置

我们为该实验建立了3个设置 , 这些设置的参数如下:

  1. xgboost:

    eta = 0.1
    max_depth = 8
    num_round = 500
    nthread = 16
    tree_method = exact
    min_child_weight = 100
    
  2. xgboost_hist (使用直方图算法):

    eta = 0.1
    num_round = 500
    nthread = 16
    tree_method = approx
    min_child_weight = 100
    tree_method = hist
    grow_policy = lossguide
    max_depth = 0
    max_leaves = 255
    
  3. LightGBM:

    learning_rate = 0.1
    num_leaves = 255
    num_trees = 500
    num_threads = 16
    min_data_in_leaf = 0
    min_sum_hessian_in_leaf = 100
    

xgboost 通过 max_depth 对建树进行深度限制与模型复杂度控制 。

LightGBM 通过 num_leaves 执行带深度限制的 leaf-wise 叶子生长策略与模型复杂度控制。

因此我们无法设置完全相同的模型进行比较。为了相对权衡, 我们在xgboost中设置 max_depth=8 以使叶子数量达到最大数量 255 与 LightGBM 中设置 num_leves=255 进行比较。

其他参数皆为默认值

结论

效率

为了比较效率, 我们只运行没有任何测试或者度量输出的训练进程,并且我们不计算 IO 的时间。

如下是耗时的对比表格:

Dataxgboostxgboost_histLightGBM
Higgs3794.34 s551.898 s238.505513 s
Yahoo LTR674.322 s265.302 s150.18644 s
MS LTR1251.27 s385.201 s215.320316 s
Expo1607.35 s588.253 s138.504179 s
Allstate2867.22 s1355.71 s348.084475 s

我们发现在所有数据集上 LightGBM 都比 xgboost 快。

准确率

为了比较准确率, 我们使用数据集测试集部分的准确率进行公平比较。

DataMetricxgboostxgboost_histLightGBM
HiggsAUC0.8395930.8456050.845154
Yahoo LTRNDCG10.7197480.7202230.732466
NDCG30.7178130.7215190.738048
NDCG50.7378490.7399040.756548
NDCG100.780890.7830130.796818
MS LTRNDCG10.4839560.4886490.524255
NDCG30.4679510.4731840.505327
NDCG50.4724760.4774380.510007
NDCG100.4924290.4969670.527371
ExpoAUC0.7567130.7777770.777543
AllstateAUC0.6072010.6090420.609167
内存消耗

我们在运行训练任务时监视 RES,并在 LightGBM 中设置 two_round=true (将增加数据载入时间,但会减少峰值内存使用量,不影响训练速度和准确性)以减少峰值内存使用量。

Dataxgboostxgboost_histLightGBM
Higgs4.853GB3.784GB0.868GB
Yahoo LTR1.907GB1.468GB0.831GB
MS LTR5.469GB3.654GB0.886GB
Expo1.553GB1.393GB0.543GB
Allstate6.237GB4.990GB1.027GB

并行测试

数据集

我们使用 terabyte click log 数据集进行并行测试,详细信息如下表:

数据任务链接数据集特征
Criteo二分类link1,700,000,00067

该数据集包含了 24 天点击记录,其中有 13 个整数特征与 26 个类别特征。

我们统计了该数据集 26 个类别前十天的点击率和计数,使用接下来十天的数据作为训练集并且该训练集中类别已与点击率和计数相对应。

处理后的训练集共有 17 亿条数据和 67 个特征。

环境

我们使用了 16 台 Windows 服务器作为实验平台,详细信息如下表:

OSCPUMemoryNetwork Adapter
Windows Server 20122 * E5-2670 v2DDR3 1600Mhz, 256GBMellanox ConnectX-3, 54Gbps, RDMA support

设置:

learning_rate = 0.1
num_leaves = 255
num_trees = 100
num_thread = 16
tree_learner = data

我们在此使用并行数据,因为该数据集数据量大但是特征少。

其他参数皆为默认值

结论

#MachineTime per TreeMemory Usage(per Machine)
1627.8 s176GB
2311 s87GB
4156 s43GB
880 s22GB
1642 s11GB

从结果看,我们发现 LightGBM 在并行学习中需要线性加速。

GPU 实验

参考 GPU 性能.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值