Lightgbm
总的来说,看完论文Lightgbm提高速度主要就是‘压缩数据的数量和维度’,降低训练数据的量,其中goss降低了数据数量,efb降低了数据的维度,基于Histogram的算法加快了扫描数据的速度,基于leaf-wise的树的生成,在同等所有节点上找到信息增益最大的进行分裂,对于一些 信息增益小的节点就不分裂,这样做减少开销。
Lightgbm 的四个特点:
一、 Gradient-based One-Side Sampling
GOSS是一个样本实例的采样算法,目的是丢弃一些对计算信息增益没有帮助的实例留下有帮助的。首先来了解一下信息增益)。可以看到具有较大梯度的数据对计算信息增益的贡献比较大【坑1】(参考论文Greedy Function Approximation: A Gradient Boosting Machine的证明),因此GOSS在进行数据采样的时候只保留了梯度较大的数据,但是如果直接将所有梯度较小的数据都丢弃掉势必会影响数据的总体分布,因此GOSS首先将要进行分裂的特征的所有取值按照绝对值大小降序排序(XGB一样也进行了排序,但是lgb不用保存排序后的结果),选取绝对值最大的a*100%个数据,然后在剩下的教小梯度数据中随机选择b*100%个数据,并且将这b%个数据乘以一个常数 (1-a)/b%,最后使用这(a+b)%个数据来计算信息增益。下图是GOSS的具体算法
从以上算法看,在d次迭代中lightGBM只使用了useSet实例进行训练,每一轮迭代都学习了一个弱学习器,并且在进行下一轮学习时,前面的每一轮所学习的弱学习器都将影响该轮的学习。
二、 Exclusive Feature Bundling