LightGBM
摘要
Gradient Boosting Decision Tree (GBDT)非常流行却鲜有实现,只有像XGBoost和pGBRT。尽管这些实现中采用了许多工程优化,当特征维度较高和数据量巨大的时候,其仍然存在效率和可扩展性的问题。一个主要原因就是对于每一个特征的每一个可能分裂点,都需要遍历全部数据计算信息增益,这一过程非常耗时。针对这一问题,本文提出两种新方法:Gradient-based One-Side Sampling (GOSS) 和Exclusive Feature Bundling (EFB)(基于梯度的one-side采样和互斥的特征捆绑)。在GOSS中,我们排除大量梯度较小的数据实例,只用剩下的来估计信息增益,我们证明,由于梯度大的实例在计算信息增益中扮演重要角色,GOSS可以用更小的数据量对信息增益进行相当准确的估计。对于EFB,我们捆绑互斥的特征(互斥特征:例如特征间很少同时非零。),来降低特征的个数。我们证明找到最优的捆绑特征是NP难的,但贪心算法能够实现相当好的近似,从而在不影响分割点确定精度的前提下,有效地减少了特征的数量。(牺牲一点分割准确率降低特征数量),这一算法命名为LightGBM。在多个公共数据集上的实验表明,LightGBM加速传统GBDT训练过程20倍以上,同时能够实现相同的精度。
1. introduction
GBDT因为其高效性、准确性、可解释性,成为了广泛使用的机器学习算法。GBDT在许多机器学习任务上取得了目前最好的效果,例如多分类,点击率预测,排序。但最近几年随着大数据的爆发(特征量和数据量),GBDT面临新的挑战,特别是准确率和效率的平衡。
传统的GBDT实现需要对每个特征扫描所有的数据样本来评估所有可能分割点的信息增益。因此他们的计算复杂度与特征的数量和样本数量成正比。这使得当遇到大数据量时,这些实现非常耗时。
为了解决这个问题,一个直接的思想是降低数据样本的数量和特征的数量。现在有工作根据根据样本权重采样来加速boosting的训练过程,由于GBDT中没有样本权重不能使用。在这篇论文中,我们提出了两种新颖的技术来实现此目标。
Gradient-based One-Side Sampling (GOSS):尽管对于GBDT数据实例没有直接的权重,我们注意到带有不同梯度的数据样本在信息增益的计算中发挥着不同的作用。根据信息增益的定义,拥有更大梯度的样例将对信息增益贡献更大。因此在下采样时,为了维持信息增益精度,我们应该尽量保留具有较大梯度的样本(大于预设置的阈值,或者在top百分位中),同时随机去除梯度小的样本。我们证明,在相同的采样率下,该采样机制将比均匀随机采样有更高的精度。尤其当信息增益有较大的范围时。
Exclusive Feature Bundling (EFB):通常在真实应用中,尽管特征数量非常多,但对应的特征空间是格外稀疏的。这为我们设计一种近乎无损的方法来减少有效特征的数量提供了可能性。尤其在稀疏特征空间中,许多特征是互斥的:他们几乎不会同时为非零。我们可以捆绑这些互斥特征。为此,我们设计了一个有效的算法,将最优的捆绑问题简化为图的着色问题(将特征作为顶点,在不是互斥的两个特征间添加边),使用贪婪算法求解。
论文内容组织:第二章回顾GBDT算法和相关工作;第三章介绍GOSS和EFB;第四章展示实验结果;第五章总结
2. Preliminaries
2.1 GBDT及其复杂度分析
GBDT是决策树的一种集成模型。在每轮迭代中,GBDT学习决策树来拟合损失函数的负梯度(近似残差)。
GBDT的主要时间花费在学习决策树,而学习决策树大部分时间消耗在于寻找最优划分点。广泛采用的寻找划分点方法使用预排序算法,在预排序的特征值上列举所有可能的划分点。该算法比较简单可以找到最有划分点,但是其训练时间和内存消耗是较高的。另一种流行的算法是基于直方图的算法。该算法不通过预排序特征值来寻找划分点,它将连续特征值分桶到不同离散bin中,使用这些bin在训练过程中来构造特征直方图。由于基于直方图的算法在时间和内存上的效率更高,我们将采用这种方法。
histogram-based算法通过特征直方图寻找最优切分点,其建直方图消耗
2.2 相关工作
3. Gradient-based One-Side Sampling
在该章节,我们提出了一种新颖的采样方法,它可以在降低样本数量和保持学得的决策树精度间取得好的平衡。
3.1 算法描述
AdaBoost中,样本权重是数据实例重要性的指标。然而在GBDT中没有原始的样本权重,因此不能直接应用Adaboost提出的采样方法。幸运的是,我们注意到GBDT中每个样本的梯度在样本采样时提供了非常有用的信息。即如果样本拥有一个小的梯度,该样例的训练误差也是小的,已经被训练好的。一种直接的想法就是丢掉小梯度的样本。然而这样做将会改变数据分布,将会损害所学得得模型得精度。为了避免这个问题,我们提出了一种名为GOSS得采样方法。
GOSS保留所有梯度较大得实例,在梯度小的实例中随机采样。为了抵消数据分布的影响,在计算信息增益时,GOSS对小梯度样例引入常量乘数。GOSS首先根据样例梯度的绝对值进行排序,选取top
3.2 Theoretical Analysis
GBDT使用决策树学习映射函数,该函数将输入空间
决策树模型在最大影响的特征上划分结点(最大信息增益)。对于GBDT,信息增益通常用划分后的方差来衡量。
在我们提出的GOSS方法中,我们首先根据样例梯度的绝对值进行降序排列;其次,我们保留top
因此,在GOSS中,我们对一个较小的样例子集评估
Theorem 3.2
根据定理,有以下讨论:
- 数据量越大,误差越小,精度越高
- 随机采样是GOSS在
- GOSS的泛化性
在GOSS近似准确的情况下,GOSS的泛化性将近似于使用全量数据;同时,采样会提高基学习器的多样性,潜在的提升泛化性能。
4. Exclusive Feature Bundling
在这个章节,我们提出一种新颖的方法来有效降低特征的数量。
高维数据通常是非常稀疏的。特征空间的稀疏性启发我们设计一种无损的方法来降低特征的数量。尤其在稀疏特征空间中,许多特征互斥,即不同时取非零值。我们可以捆绑互斥特征为单一特征。通过精心设计特征扫描算法,我们从捆绑特征中建立与单一特征相同的特征直方图。以这种方法,我们将建立直方图的复杂度从
有两个问题需要解决:
- 怎么判断哪些特征可以捆绑在一起
- 怎样构建bundle,即怎么把多个特征捆绑为单一特征
Theorem 4.1 将特征划分为最小数量的互斥包是NP-hard
proof: 我们引入图着色问题,由于图着色问题是NP-hard,我们可以推断以上结论
给定图着色实例G=(V, E)。以G的关联矩阵的每一行为特征,得到我们问题的一个实例有|V|个特征。 很容易看到,在我们的问题中,一个独特特征群与一组具有相同颜色的顶点相对应,反之亦然。
4.1 bunding
对于第一个问题,我们证明Theorem 4.1是NP-hard,即不可能在多项式时间内找到一个精确解。为了找到一个好的近似算法,我们通过将特征视为顶点,在两个不互斥的特征间添加边,将最有绑定问题转化为图着色问题。然后我们可以使用贪婪算法用于图着色来进行特征捆绑。我们注意到,有些特征尽管不是100%互斥的,但几乎不同时取非0值。如果我们的算法运行较小的冲突,我们可以得到更少数量的特征捆绑群,并进一步提升计算效率。通过简单的计算,随即污染一小部分特征值将会影响训练精度,最多为:
基于上面的讨论,我们涉及一种算法对互斥特征进行捆绑。
- 首先,我们构建加权图,边的权重对应特征间的冲突。
- 其次,我们以特征在图中的度降序排列。
- 最后,我们选取有序序列中的每一个特征,指派它到一个已存在的bundle中(有一个小的冲突,由
4.2 merge feature
对于第二个问题,我们需要好的方式来合并在同一个Bundle中的特征,同时降低对应的训练复杂度。关键是确保原始特征值可以在特征bundle中区分。由于基于直方图的算法存储离散值而不是连续特征值,我们通过将互斥特征放在不同的箱中来构建bundle。这可以通过将偏移量添加到特征原始值中实现。例如,假设我们在bundle中有两个特征,特征A取值[0,10),特征B取值[0,20)。我们添加偏移量10 到特征B中,使特征取值为[10,30)。之后我们可以合并特征A、B,使用取值为[0,30)的新特征代替A和B。
EFB可以捆绑许多互斥特征,将其转化为稠密特征,来有效的避免对0特征值不必要的计算。事实上,我们可以对每一个特征构建对应表记录非零值来忽略0特征值,这样也可以优化基础的直方图算法。通过在表中扫描数据,对一个特征建立直方图的复杂度从
5. Experiments
主要是LightGBM在各大数据集上的表现,及GOSS和EFB的有效性
6.优缺点
6.1 内存更小
XGBoost 使用预排序后需要记录特征值及其对应样本的统计值的索引,而 LightGBM 使用了直方图算法将特征值转变为 bin 值,且不需要记录特征到样本的索引,将空间复杂度从 O(2*#data) 降低为 O(#bin) ,极大的减少了内存消耗;
LightGBM 采用了直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗;
LightGBM 在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。
6.2 速度更快
LightGBM 采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度;
LightGBM 在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;
LightGBM 采用了基于 Leaf-wise 算法的增长策略构建树,减少了很多不必要的计算量;
LightGBM 采用优化后的特征并行、数据并行方法加速计算,当数据量非常大的时候还可以采用投票并行的策略;
LightGBM 对缓存也进行了优化,增加了 Cache hit 的命中率。
直方图算法
这里额外补充下直方图算法, 可以参照下面链接的讲解,很详细:
Lightgbm 直方图优化算法深入理解