实验

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

    硬件环境

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

    OS CPU Memory
    Ubuntu 14.04 LTS 2 * E5-2670 v3 DDR4 2133Mhz, 256GB

    底层

    我们使用 作为底层算法。

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

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

    1. xgboost:

    2. xgboost_hist (使用直方图算法):

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

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

    其他参数皆为默认值

    结论

    效率

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

    如下是耗时的对比表格:

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

    准确率

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

    Data Metric xgboost xgboost_hist LightGBM
    Higgs AUC 0.839593 0.845605 0.845154
    Yahoo LTR NDCG<sub>1</sub> 0.719748 0.720223 0.732466
    NDCG<sub>3</sub> 0.717813 0.721519 0.738048
    NDCG<sub>5</sub> 0.737849 0.739904 0.756548
    NDCG<sub>10</sub> 0.78089 0.783013 0.796818
    MS LTR NDCG<sub>1</sub> 0.483956 0.488649 0.524255
    NDCG<sub>3</sub> 0.467951 0.473184 0.505327
    NDCG<sub>5</sub> 0.472476 0.477438 0.510007
    NDCG<sub>10</sub> 0.492429 0.496967 0.527371
    Expo AUC 0.756713 0.777777 0.777543
    Allstate AUC 0.607201 0.609042 0.609167

    内存消耗

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

    数据集

    数据 任务 链接 数据集 特征
    Criteo 二分类 link 1,700,000,000 67

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

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

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

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

    设置:

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

    其他参数皆为默认值

    结论

    #Machine Time per Tree Memory Usage(per Machine)
    1 627.8 s 176GB
    2 311 s 87GB
    4 156 s 43GB
    8 80 s 22GB
    16 42 s 11GB

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

    参考 .