论文阅读《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》

LightGBM:一种高效的梯度提升决策树

摘要:

梯度提升决策树(GBDT)是一种流行的机器学习算法,并且有很多有效的实现,如XGBoost和pGBRT。 尽管在这些实现中已经采用了许多工程优化,但是当特征维度高且数据量大时,效率和可伸缩性仍然不能令人满意。一个主要原因是,对于每个特征,需要扫描所有数据实例以估计所有可能的分裂点的信息增益,这非常耗时。为了解决这个问题,我们提出了两种新技术:基于梯度的单侧采样(GOSS)和互斥的特征捆绑(EFB)。在GOSS中,我们排除了很大比例的具有小梯度的数据实例,并且仅使用其余的来估计信息增益。 我们证明,由于具有较大梯度的数据实例在信息增益的计算中起着更重要的作用,因此GOSS可以以更小的数据量对信息增益作出非常准确的估计。在EFB中,我们捆绑了互斥特征(即特征很少同时采用非零值),以减少特征的数量。 我们证明找到特征的最佳捆绑是NP难的,但是贪心算法可以实现非常好的近似比(因此可以有效地减少特征的数量而不会损害分裂点确定的准确性)。我们把使用GOSS和EFB LightGBM称为新的GBDT实现。 我们在多个公共数据集上的实验表明,LightGBM可以将传统GBDT的训练过程加速20多倍,同时实现几乎相同的精度。

1 介绍

由于其效率,准确性和可解释性,梯度提升决策树(GBDT)是一种广泛使用的机器学习算法。 GBDT在许多机器学习任务中实现了最先进的性能,例如多分类,点击率预测和学习排序。近年来,随着大数据的出现(在特征数量和样本数量方面),GBDT面临着新的挑战,特别是在准确性和效率之间的权衡。 对于每个特征,GBDT的常规实现需要扫描所有数据样本以估计所有可能的分裂点的信息增益。 因此,它们的计算复杂度与特征数量和样本数量成正比。 这使得处理大数据非常耗时。应对这一挑战,一个直截了当的想法是减少数据的数量和特征的数量。 事实证明这是非常有意义的。有部分工作根据数据权重采样来加速boosting的过程,但由于gbdt没有样本权重不能应用,而本文提出两种新方法实现此目标。

Gradient-based One-Side Sampling (GOSS):虽然GBDT中的数据样本没有权重,但我们注意到具有不同梯度的数据在信息增益的计算中起着不同的作用。 特别是,根据信息增益的定义,具有较大梯度的样本(即训练不足的实例)对信息增益有更大的影响。 因此,当对数据实例进行下采样时,为了保持信息增益估计的准确性,我们应该尽量保留那些具有大梯度(例如,大于预定阈值,或者在最高百分位数之间)的样本,并且随机删除那些小梯度的样本。 我们证明,这种处理可以比均匀随机采样获得更准确的增益估计结果,具有相同的目标采样率,特别是当信息增益的值范围较大时。

互斥特征捆绑(EFB)。 通常在实际应用中,尽管存在大量特征,但特征空间非常稀疏,这使得我们有可能设计出几乎无损的方法来减少有效特征的数量。 具体地说,在稀疏特征空间中,许多特征(几乎)是唯一的,即它们很少同时取非零值。 示例包括独热特征(例如,文本挖掘中的独热编码表示)。 我们可以捆绑这些互斥功能。 为此,我们通过将最佳捆绑问题归约到图着色问题来设计一种有效的算法(通过将特征作为顶点并为每两个特征添加边缘,如果它们不相互排斥),并通过具有恒定近似比的贪心算法求解它。

我们把用GOSS和EFB 实现的新的GBDT算法称为LightGBM2。 我们在多个公共数据集上的实验表明,LightGBM可以将训练过程加速20多倍,同时实现几乎相同的准确度。

本文的其余部分安排如下。
首先,我们在第二节回顾一下GBDT算法和相关工作。 然后在第三节中介绍GOSS的细节,在第四节中介绍EFB。 我们在公共数据集上对LightGBM的实验在第五节中介绍。 最后,我们在第六节对这篇论文进行总结。

2 初步措施
2.1 GBDT及其复杂性分析

GBDT是决策树的集成模型,它是按顺序训练的。 在每次迭代中,GBDT通过拟合负梯度(也称为残差)来学习决策树。GBDT的主要成本在于学习决策树,学习决策树最耗时的部分是找到最佳分裂点。 查找分裂点的最常用算法之一是预排序算法,该算法枚举预排序特征值上的所有可能分割点。 该算法简单并且可以找到最优分裂点,但是在训练速度和内存消耗方面都是低效的。 另一种流行的算法是基于直方图的算法,基于直方图的算法不是通过特征排序找到分割点,而是将连续的特征值存储到离散的区间中,并使用这些区间在训练期间构建特征直方图。 由于基于直方图的算法在内存消耗和训练速度方面更高效,我们将在其基础上开发我们的工作。

如图1所示,基于直方图的算法基于特征直方图找到最佳分裂点。 对于直方图构建,花费O(#data×#feature),对于分裂点查找,花费O(#bin×#feature)。 由于#bin通常比#data小得多,因此直方图构建消耗了主要的计算复杂度。 如果我们可以减少#data或#feature,我们将能够大大加快GBDT的训练。

2.2 相关工作

GBDT实现已经有相当多的方法,包括XGBoost,pGBRT,scikit-learn 和R中的gbm实现了预排序的算法,而pGBRT实现了基于直方图的算法。XGBoost支持预排序算法和基于直方图的算法。 由于XGBoost优于其他算法。 因此我们在实验部分使用XGBoost作为baseline。

为了减小训练数据的大小,常见的方法是对数据样本进行下采样。 例如,过滤掉权重小于固定阈值的样本。 SGB使用随机子集在每次迭代中训练弱学习者。 在[6]中,采样率在训练过程中动态调整。 但是,除SGB之外的所有算法都基于AdaBoost,不能直接应用于GBDT,因为GBDT中的数据实样本没有原始权重。 尽管SGB可以应用于GBDT,但它会损害准确性,因此不是个理想的选择。

同样,为了减少特征的数量,可以过滤掉弱特征。 通常通过主成分分析或投影追踪来完成。 然而,这些方法高度依赖一个假设:特征包含高度冗余,这在实践中往往不总是如此(特征通常设计有其独特的贡献,并且去除它们中的任何一个可能在某种程度上影响训练准确性)。

实际应用中使用的大规模数据集通常非常稀疏。 具有预排序算法的GBDT可以通过忽略零值特征来降低训练成本。 但是,使用基于直方图的算法的GBDT没有高效的优化稀疏解决方案。 原因是基于直方图的算法无论特征值是否为零,都需要为每个数据样本检索特征区间值(参见图1)。 如果基于直方图GBDT可以有效地利用这种稀疏特征将是最优解决方案。

为了解决以前工作的局限性,我们提出了两种新的技术,称为基于梯度的单侧采样(GOSS)和互斥特征捆绑(EFB)。 更多细节将在下一节中介绍。

3 Gradient-based One-Side Sampling基于梯度的单侧采样(GOSS)

在本节中,我们提出了一种新的GBDT抽样方法,可以在减少数据量和保持学习决策树的准确性之间取得良好的平衡。

3.1 Algorithm Description

在AdaBoost中,样本权重可以作为数据样本重要性的良好指标。但是,在GBDT中,没有原始样本权重,因此无法直接应用为AdaBoost提出的采样方法。 幸运的是,我们注意到GBDT中每个数据样本的梯度为我们提供了有用的数据采样信息。 也就是说,如果样本梯度很小,则此样本的训练误差很小,并且已经训练很好了。 一个简单的想法是丢弃那些具有小梯度的数据样本。 但是,这样做会改变数据分布,影响模型的准确性。 为了避免这个问题,我们提出了一种称为基于梯度的单侧采样(GOSS)的新方法。

GOSS保持所有具有大梯度的样本,并对具有小梯度的样本执行随机采样。 为了补偿对数据分布的影响,在计算信息增益时,GOSS为具有小梯度的数据样本引入了常数乘数(参见图2)。 具体来说,GOSS首先根据梯度的绝对值对数据样本进行排序,然后选择前a×100%的样本。 然后它从其余数据中随机抽样b×100%个样本。 之后,GOSS在计算信息增益时用小梯度数据样本乘以常数(1-a) / b。 通过这样做,我们就会更加关注训练不足的实例,而不是更改原始数据分布。

3.2 Theoretical Analysis

GBDT使用决策树来学习从输入空间X^{s}到梯度空间G[1]的函数。 假设我们有一个n个样本的训练集,{x1,···,xn},其中每个xi是在空间X^{s}中具有维度s的向量。 在梯度增强的每次迭代中,损失函数关于模型输出的负梯度表示为{g1,...,gn}。 决策树模型按照具有最大的信息增益的特征来分裂节点。 对于GBDT,信息增益通常通过分割后的方差来度量,其定义如下:

定义3.1:设O为决策树某个固定节点上的训练数据集。点d处的分裂特征j的方差增益定义为:

对于特征j,决策树算法选择,并且计算最大增益X_{j}\left ( d_{j}^{*} \right ),然后,根据分裂点d_{j}^{*}处的特征j^{*}将数据分割到左右节点。

在我们提出的GOSS方法中,首先,我们按照梯度的绝对值对训练样本进行降序排序; 第二,保留保持top-a×100%个较大梯度样本作为数据子集A; 然后,对于剩余数据集合A^{c},包含了(1-a)×100%小梯度样本,进一步随机采样b*A^{c}的数据作为子集B. 最后,我们根据子集A∪B上的估计方差增益\tilde{V_{j}}\left ( d \right )来分割数据样本:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值