LightGBM原理解读
LightGBM是现在数据挖掘比赛中的大杀器,效果甚至优于一些深度网络模型,而且参数相比神经网络更方便调整。下面就根据LGB的文本来解释一下LighGBM的原理。
在笔者看来,LightGBM的改进大部分是基于计算、运行效率上的改进,使GBDT类模型的性能更快,LGB主要针对数据并行和特征并行进行了优化,大大提升了模型的效率。下面就来一一解读。
传统GBDT方法的缺点
传统GBDT方法在特征维度较高和数据量较大的时候,存在效率和可扩展性的问题。主要原因是GBDT对于每一个特征的每一个分裂点,都需要遍历全部数据计算信息增益,这一过程非常耗时。
针对这一问题,LightGBM提出了**Gradient-based One-Side Sampling (GOSS) 和Exclusive Feature Bundling (EFB)(基于梯度的one-side采样和互斥的特征捆绑)**两种新方法。
寻找最优切分点————预排序和直方图
学习决策树是GBDT主要的时间花销,而学习决策树中找到最优切分点最消耗时间。广泛采用的预排序算法来找到最优切分点,这种方法会列举预排序中所有可能的切分点。这种算法虽然能够找到最优的切分点,但对于训练速度和内存消耗上都效率低。另一种流行算法是直方图算法(histogram-based algorithm)。直方图算法并不通过特征排序找到最优的切分点,而是将连续的特征值抽象成离散的分箱,并使用这些分箱在训练过程中构建特征直方图,这种算法更加训练速度和内存消耗上都更加高效,lightGBM使用此种算法。
histogram-based算法通过直方图寻找最优切分点,其建直方图消耗O(#data * #feature),寻找最优切分点消耗O(#bin * # feature),而#bin的数量远小于#data,所以建直方图为主要时间消耗。如果能够减少数据量或特征量,那么还能够够加速GBDT的训练。
实际中大规模的数据集通常都是非常稀疏的,使用预排序算法的GBDT能够通过无视为0的特征来降低训练时间消耗。然后直方图算法没有优化稀疏的方案。因为直方图算法无论特征值是否为0,都需要为每个数据检索特征区间值。如果基于直方图的GBDT能够有效利用稀疏特征将是最优。
直方图作差
LightGBM采用了直方图作差的方法进一步提高效率,计算某一节点的叶结点直方图可以通过将该结点的直方图与另一子结点的直方图作差得到,所以每次分裂只需计算样本数较少的子结点的直方图,然后作差得到另一个子结点的直方图。
直方图法的优点:
- Ligh