以前学习集成学习时候,都是从网上博客等等一些地方学习的,最近重新复习学习,所以拿出论文来读,这个是这篇论文LightGBM: A Highly Efficient Gradient Boosting Decision Tree的自己的笔记。
在我理解中,这篇论文,是对GBDT算法的改进,是对GBDT算法的增速。主要的改进点就在对训练数据的处理上,其实对算法本质没有改进。
GBDT存在着一个问题,对于每棵树,分裂节点时,都要对每个特征,遍历所有的样本,对所有的可能分裂点都要计算信息增益,这很耗时,即使,把每个结果都保存下来,那么消耗大量的时间和空间。论文中提出了两个主要的算法,来减小时间的消耗。
GOSS:Gradient-based one-side Sampling
EFB: Exclusive Feature Bundling
GOSS:Gradient-based one-side Sampling
这个算法主要是减少训练数据量。在GBDT的训练中,训练样本都没有权重,但梯度大的样本在计算信息增益时扮演更重要的角色,即我们可以选择梯度大的样本。但是如果选择全部的大梯度样本,这样会改变原始的数据分布,从而损害训练模型的精度,所以GOSS的做法就是:
- 对所有样本按照梯度大小排序,选择top a * 100% 的样本
- 在剩余样本中随机采样 b * 100% 的样本
- 对于随机抽样的样本,计算信息增益时 * (1 - a)/ b
这样做既可以减少训练数据,还可以尽可能符合数据的原始分布。
EFB: Exclusive Feature Bundling
高维特征是很稀疏的,这种特性使我们可以设计一个损失小的算法去减少特征数量,特别在稀疏特征中,许多特征是互斥