1 简介
本文根据2017年microsoft研究所等人写的论文《LightGBM: A Highly Efficient Gradient Boosting Decision Tree》翻译总结。
Gradient Boosting Decision Tree (GBDT)已是一个流行的机器学习方法,也存在一些实施,例如XGBoost和pGBRT。可以进行多类别分类、点击率预测、学习排名等应用场景。但他们的效率和可扩展性还是不太满意,尤其是针对高维度数据和大数据时。其中一个主要原因是:对于每个特征,他们需要扫描所有的数据实例来评估所有可能分割点的信息增益,这非常花费时间。
为了解决这个问题,我们引入了两项技术:Gradient-based One-Side Sampling (GOSS) and
Exclusive Feature Bundling (EFB,排除在外特征的捆绑打包). 采用GOSS和EFB的GBDT算法,我们叫做LightGBM。
采用GOSS,我们可以排除相当比例的小梯度信息的数据实例,仅使用剩下的数据实例评估信息增益。拥有大梯度的数据实例在信息增益计算中扮演重要的角色。
即GOSS用来减少训练数据量。
采用EFB,我们可以把互斥的特征(他们很少同时拥有非零值)打包在一起,来减少特征的数量。寻找互斥特征的最优打包是NP-hard(NP是指多项式复杂程度的非确定性问题non-deterministic polynomial,缩写NP)的,但一个贪婪的算法可以完成很好的近似比率。
即EFB用来减少特征维度。
LightGBM在完成相同正确率的情况下,相比传统的GBDT有20倍以上的速度。文中主要将LightGBM和XGBoost对比。
2 预备知识
2.1 GBDT及其复杂度分析
GBDT是决策树的集成算法,它会按顺序训练。在每个迭代中,GBDT通过拟合负梯度(残差)来学习决策树。
GBDT最主要的时间花费是学习决策树,在学习决策树时,最花费时间的地方是找到最佳分割点。其中一个流行的寻找分割点方法是预排序算法,它会在预排序好的特征值上迭代所有可能的分割点。这种算法简单,可以找到最优的分割点,但是它在训练速度和内存使用上效率不高。
另一个流行的算法是基于直方图的算法。该算法将连续的特征值分割到一些离散的箱体中,然后在训练中使用这些箱体来构建特征直方图。该算法在训练速度和内存使用上更加有效。LightGBM将扩展此方法。
基于直方图的算法如上图,其基于特征直方图寻找最佳分割点。它花费O(#data * #feature)来构建直方图,花费O(#bin * #feature)进行分割点查找。因为#bin通常比#data小很多,所有构建直方图决定计算的复杂度,如果我们减少#data或者#feture,就可以很大的提升GBDT训练速度。
2.2 相关工作
Scikit-learn 、 gbm in R是预排序算法;
pGBRT是基于直方图的算法;
XGBoost支持预排序和基于直方图。XGBoost优于Scikit-learn 、 gbm in R、pGBRT。本文主要是将LightGBM与XGBoost对比。
为了减少训练数据的大小,常用的方法是下采样数据。例如如果数据实例的权重小于某个阈值,就过滤掉。SGB(Stochastic gradient boosting)使用一个随机分组在每个迭代中训练弱学习者。采样比例可以在训练过程中动态调整。但是除了SGB,其他算法是基于AdaBoost的,不能直接应用于GBDT,因为没有天然的权重可以用于GBDT的数据。虽然SGB可以应用于GBDT,但它会损害准确率,不是一个好的选择。
同时,对于减少特征维度,自然也是过滤弱的特征,通常是通常主成分分析或者投影追踪(projection pursuit)。但是这些方法都假设特征值们拥有足够的富裕度,这在实际中也许并不总是这样。特征通常是有他们各自独特的贡献,去除特征中的任何一个都可能影响训练的准确度。
实际场景中大数据通常是稀疏的。基于预排序的GBDT可以忽略那些零值,减少训练成本。但是基于直方图算法的GBDT没有有效的稀疏优化解决方案,因为其需要取回特征箱体值,无论特征值是零或非零。故基于直方图算法的GBDT可以有效利益这种稀疏特性。
3 GOSS (Gradient-based One-Side Sampling)
3.1 算法描述
我们发现在GBDT中,每个数据实例的梯度对数据采样提供了有用的信息。
GOSS会保有带有大梯度的数据实例,而对于小梯度的数据实例进行随机采样。为了补偿对数据分布的影响,在计算信息增益时,GOSS对于小梯度数据实例引入了一个常数乘数。如下图算法所示。GOSS首先根据梯度绝对值对数据实例排序,然后选择前面a100%的数据。接着从剩下的数据中随机采样b100%的实例。上面完成后,GOSS在计算信息增益时,利用一个常熟因子(1-a)/b 来放大采样的小梯度数据。这样,我们就可以更加关注训练不足的实例,而不会太改变原始数据的分布。
3.2 理论分析
公式较多。对于GBDT,信息增益通常是通过分割后的方差衡量的。
4 EFB-Exclusive Feature Bundling
高维数据通常是稀疏的。在一个稀疏的特征空间,许多特征是互斥的,即他们不会同时取得零值。我们可以把排除在外的特征打包成一个特征。通过设计一个仔细小心的特征扫描算法,我们可以将不同特征打包后,形成一样的特征直方图。这样特征直方图创建的计算复杂度从O(#data * #feature) 下降到 O(#data * #bundle)。这样在不损害准确性的情况下,提供GBDT训练速度。
有两个事情需要考虑,一是哪些特征要被打包在一起,二是如何构建这些打包。第一件事是NP-hard的,在多项式时间内找不到一个准确的解决方法。
EFB组合了许多稀疏特征,如one-hot 编码特征、不明显的除外特征。
5 实验结果
所有实验采用多线程,线程数量是16。
XGBoost:xgb_exa(pre-sorted algorithm) and xgb_his (histogram-based algorithm)。
EFB (called lgb_baselline)。
Lgb_baseline: LightGBM without GOSS and EFB。
从下别表格2可以看出来LightGBM是最快的算法,GOSS可以提高2倍的速度,EFB是一个非常有效的算法,可以提升直方图算法中稀疏属性的利用,速度提升也很明显。