LightGbm Paper Review

2019-04-28  本文已影响0人  呢嘻嘻嘻嘻嘻

LightGBM

首先拉出来LGBM的改进对象,XGBoost

     优点:

针对以上的缺点,LGBM提出改进
1、Histogram Algorithm

     Pre-Sorted需要保存每一个特征的排序结构,所以要存储 2 * Features * Data * 4Bytes,而Hist 只需要保存离散值bin value,且不用存原始数据,Data * Features * 1Byte。
     对于且子节点相对应的Feature histogram 时,只需要构造一个子节点的Feature Histogram,另外一个子节点的Histogram 用父节点减去刚构造出来的即可。


Histogram Algorithm
2、GOSS(Gradient-based One-Side Sampling)

     根据样本某一个特征上的单梯度作为样本的权值进行训练。
1)选择前a%个较大梯度的值作为大梯度值的训练样本
2)从剩余的1-a%个较小梯度的值中,随机选择b%个作为小梯度值得训练样本
3)对于较小梯度的样本,即b%(1-a%)samples ,在计算信息增益时将其放大(1-a)/b倍
总结:a%samples + b%(1-a%)*samples 作为训练样本

GOSS Algorithm
3、EFB(Exclusive Feature Bundling)

高维数据往往具有很强的稀疏性,提出EFB方法来解决高维数据稀疏问题。

Greedy Bundling
贪心算法,将如何确定哪些特征用于融合的问题转化为一个图着色算法,构建一个以feature为图中的点(V),以feature 之间的总冲突为图中的边(E)。
(这里的冲突值是不是Feature之间的Corr?)
首先按照对每个点(feature)做降序,然后将特征合并到冲突数小于K的Bundle或者新建另外一个Bundle,复杂度O(Feature^2)。
Merge Exclusive Features
然后通过Algo4对Bundle中的特征进行融合。
由于每一个Bundle中的特征数量是不同的,所以要重新构建合并Bundle Feature 的Range,在第一个For循环中,记录每个Feature与之前Features累积的TotalRange。
在第二个For循环中,根据之前的binRanges重新计算出新的BinValue(F[j]bin[i]+binRanges[j]),保证Feature之间的值不会冲突,这是对于稀疏矩阵进行优化,由于之前GreedyBundling 算法对Features 进行冲突检查确保Bundle内特征冲突尽可能少,所以特征之间的非0元素不会有太多的冲突。
          Data.Shape= Samples*bundles, s.t. bundles << features
4、Leaf - Wise(Best - First) Tress Growth

     LGB 对于树的生长使用的是Leaf - Wise,而不是XGB的Level-Wise。主要是由于LGB认为 Level-Wise 的做法会产生一些地信息增益的节点,从而浪费计算资源。(Generally, Level-Wise 有防止过拟合的作用)LGB认为Leaf-Wise 能更好的追求精度,用max_depth 控制树的高度。又Histogram和GOSS有天然的正则作用,因此LGB使用Leaf-Wise也可以取得更好的效果,且不易过拟合。
References:
     LightGBM
     XGBoost

上一篇 下一篇

猜你喜欢

热点阅读