LGBM的理解及优缺点
LGBM
Light GBM is a gradient boosting framework that uses tree based learning algorithm。
传统的GBDT算法存在的问题:
1、如何减少训练数据
常⽤的减少训练数据量的⽅式是down sample。例如在[5]中,权重⼩于阈值的数据会被过滤掉,SGB在每⼀轮迭代中⽤随机的⼦集训练弱学习器;在[6]中,采样率会在训练过程中动态调整。但是,所有这些⼯作除了SGB外都是基于AdaBoost的,并且由于GBDT没有数据实例的权重,所以不能直接运⽤到GBDT上。虽然SGB可以应⽤到GBDT,但是它这种做法对acc影响太⼤了。
2、如何减少特征
类似的,为了减少特征的数量,需要过滤若特征[22, 23, 7, 24]。这通常⽤PCA和projection pursuit来做。可是,这些⽅法⾼度依赖⼀个假设,那就是特征包含相当多的冗余的信息。⽽这个假设在实践中通常不成⽴(因为通常特征都被设计为具有独特作⽤的,移除了哪个都可能对训练的acc有影响)
3、关于稀疏的数据
现实应⽤中的⼤规模数据通常是相当稀疏的。使⽤pre-sorted algorithm的GBDT可以通过忽略值为0的特征来降低训练的开销。⽽使⽤histogram-based algorithm的GBDT没有针对稀疏数据的优化⽅案,因为histogram-based algorithm⽆论特征值是否为0,都需要检索特征的bin值,所以它能够有效地利⽤这种稀疏特性。
LightGBM 提出的主要原因就是为了解决 GBDT 在海量数据遇到的问题,让 GBDT 可以更好更快地⽤于⼯业实践。
LGBM的技术细节
Histogram 算法
直⽅图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构造⼀个宽度为k的直⽅图。在遍历数据的时候,根据离散化后的值作为索引在直⽅图中累积统计量,当遍历⼀次数据后,直⽅图累积了需要的统计量,然后根据直⽅图的离散值,遍历寻最优的分割点。
使⽤直⽅图算法有很多优点。⾸先,最明显就是内存消耗的降低,直⽅图算法不仅不需要额外存储预排序的结果,⽽且可以只保存特征离散化后的值,⽽这个值⼀般⽤ 8 位整型存储就⾜够了,内存消耗可
以降低为原来的1/8。
然后在计算上的代价也⼤幅降低,预排序算法每遍历⼀个特征值就需要计算⼀次分裂的增益,⽽直⽅图算法只需要计算k次(k可以认为是常数),时间复杂度从O(#data*#feature)优化到O(k*#features)。
当然,Histogram 算法并不是完美的。由于特征被离散化后,到的并不是很精确的分割点,所以会对结果产⽣影响。但在不同的数据集上的结果表明,离散化的分割点对最终的精度影响并不是很⼤,甚⾄有时候会更好⼀点。原因是决策树本来就是弱模型,分割点是不是精确并不是太重要;较粗的分割点也有正则化的效果,可以有效地防⽌过拟合;即使单棵树的训练误差⽐精确分割的算法稍⼤,但在梯度提升(Gradient Boosting)的框架下没有太⼤的影响。
带深度限制的 Leaf-wise 的叶⼦⽣长策略
在 Histogram 算法之上,LightGBM 进⾏进⼀步的优化。⾸先它抛弃了⼤多数 GBDT ⼯具使⽤的按层⽣长 (level-wise) 的决策树⽣长策略,⽽使⽤了带有深度限制的按叶⼦⽣长 (leaf-wise) 算法。Level-wise 过⼀次数据可以同时分裂同⼀层的叶⼦,容易进⾏多线程优化,也好控制模型复杂度,不容易过拟合。但实际上 Level-wise 是⼀种低效的算法,因为它不加区分的对待同⼀层的叶⼦,带来了很多没必要的开销,因为实际上很多叶⼦的分裂增益较低,没必要进⾏搜索和分裂。
Leaf-wise 则是⼀种更为⾼效的策略,每次从当前所有叶⼦中,到分裂增益最⼤的⼀个叶⼦,然后分裂,如此循环。因此同 Level-wise 相⽐,在分裂次数相同的情况下,Leaf-wise 可以降低更多的误差,得到更好的精度。Leaf-wise 的缺点是可能会长出⽐较深的决策树,产⽣过拟合。因此 LightGBM 在 Leaf-wise 之上增加了⼀个最⼤深度的限制,在保证⾼效率的同时防⽌过拟合
直⽅图差加速
LightGBM 另⼀个优化是 Histogram(直⽅图)做差加速。⼀个容易观察到的现象:⼀个叶⼦的直⽅图可以由它的⽗亲节点的直⽅图与它兄弟的直⽅图做差得到。通常构造直⽅图,需要遍历该叶⼦上的所有数据,但直⽅图做差仅需遍历直⽅图的k个桶。利⽤这个⽅
法,LightGBM 可以在构造⼀个叶⼦的直⽅图后,可以⽤⾮常微⼩的代价得到它兄弟叶⼦的直⽅图,在速度上可以提升⼀倍。
直接⽀持类别特征
实际上⼤多数机器学习⼯具都⽆法直接⽀持类别特征,⼀般需要把类别特征,转化到多维的0/1 特征,降低了空间和时间的效率。⽽类别特征的使⽤是在实践中很常⽤的。基于这个考虑,LightGBM 优化了对类别特征的⽀持,可以直接输⼊类别特征,不需要额外的0/1 展开。并在决策树算法上增加了类别特
征的决策规则。在 Expo 数据集上的实验,相⽐0/1 展开的⽅法,训练速度可以加速 8 倍,并且精度⼀致。据我们所知,LightGBM 是第⼀个直接⽀持类别特征的 GBDT ⼯具。
优点
更快的训练速度和更⾼的效率:LightGBM使⽤基于直⽅图的算法。例如,它将连续的特征值分桶(buckets)装进离散的箱⼦(bins),这是的训练过程中变得更快。
更低的内存占⽤:使⽤离散的箱⼦(bins)保存并替换连续值导致更少的内存占⽤。
更⾼的准确率(相⽐于其他任何提升算法) :它通过leaf-wise分裂⽅法产⽣⽐level-wise分裂⽅法更复杂的树,这就是实现更⾼准确率的主要因素。然⽽,它有时候或导致过拟合,但是我们可以通过设置 **max-depth** 参数来防⽌过拟合的发⽣。
⼤数据处理能⼒:相⽐于XGBoost,由于它在训练时间上的缩减,它同样能够具有处理⼤数据的能⼒。
⽀持并⾏学习
缺点
正则化解决过拟合直⽅图较为粗糙,会损失⼀定精度,但是在gbm的框架下,基学习器的精度损失可以通过引⼊更多的tree来弥补
参数调优
下⾯⼏张表为重要参数的含义和如何应⽤
接下来是调参
下表对应了Faster Spread,better accuracy,over-fitting三种⽬的时,可以调整的参数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论