LGBM算法是Light Gradient Boosting Machine的简称,源于GBDT(Gradient Boosting Decision Tree)算法,它是一个实现GBDT算法的框架,支持高效率的并行训练,具有训练速度快、内存消耗低、准确率高、支持分布式可以处理海量数据的优点。
在LGBM出现之前,最有名的GBDT工具就是XGBoost(eXtreme Gradient Boosting),针对XGBoost的缺陷,LGBM对此进行了如下7个方面的优化:
(一)基于Histogram的决策树算法,即直方图算法。直方图算法可以只保存特征离散化后的值,一般用8位整型存储,这样内存消耗可以降低为原来的1/8。预排序算法XGBoost每遍历一个特征值就需要计算一次分裂的增益,而直方图算法LGBM只需要计算k次(可以为常数),计算代价更小。LGBM另一个优化是对直方图做差加速,一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到,在速度上可以提升一倍。在实际建树中,LGBM先计算直方图小的叶子节点,然后利用直方图做差来获得大的叶子节点,这样可以以微小的代价获得兄弟叶子直方图,
(二)单边梯度采样(GOSS), GOSS算法从减少样本的角度出发,排除大部分小梯度的样本,仅用剩下的样本计算信息增益,它是一种在减少数据量和保证精度上平衡的算法。
(三)互斥特征捆绑(EFB)将一些特征进行融合绑定,降低特征数量,在构建直方图时的时间复杂度也大幅降低。
(四)带深度限制的Leaf-wise的叶子生长策略,该策略每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。大多数GBDT工具适用的Level-wise的决策树生长策略,Leaf-wise与Level-wise相比,有两大优点:一是在分裂次数相同的情况下,误差更低,精确度高;二是在Leaf-wise上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。
(五)直接支持类别特征(Categorical Feature)。大多数机器学习工具无法直接支持类别特征,一般需要通过one-hot编码,转化为多维的0/1特征。对于决策树来说,尤其是类别特征中类别个数较多的情形下,使用one-hot编码,会影响决策树的学习,产生样本切分不平衡的问题,导致切分增益非常小,即浪费这个特征。LGBM对此进行优化,可以直接输入类别特征,具体算法为:在枚举分割点之前,先把直方图按照每个类别对应的label均值进行排序;然后按照排序的结果依次枚举最优分割点。总之,LGBM在保证精度一致的条件下,加快了训练速度,最重要的是,LGBM是第一个直接支持类别特征的GBDT工具。
(六)支持高效并行。LGBM支持特征并行、数据并行和投票并行。特征并行中,LGBM摒弃传统数据垂直划分,而是保留全部训练数据,在得到最佳划分方案后可在本地执行划分而减少了不必要的通信。在数据并行方面,LGBM使用Reduce scatter把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。在投票并行方面,进一步优化数据并行中的通信代价,使通信代价变成常数级别。
(七)Cache命中率优化。XGBoost无法对cache进行优化,并且会造成较大的Cache Miss。LGBM对所有的特征都采用相同的方式获得梯度,只需要对梯度进行排序并可实现连续访问,大大提高了缓存命中率;其次,因为不需要存储行索引到叶子索引的数组,降低了存储消耗,而且也不存在 Cache Miss的问题。