LightGBM介绍及参数调优

一、LightGBM简介html

  LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法。它能够说是分布式的,高效的,有如下优点:算法

  1)更快的训练效率多线程

  2)低内存使用框架

  3)更高的准确率机器学习

  4)支持并行化学习分布式

  5)能够处理大规模数据工具

  与常见的机器学习算法对比,速度是很是快的学习

  

二、XGboost的缺点优化

  在讨论LightGBM时,不可避免的会提到XGboost,关于XGboost能够参考此博文编码

  关于XGboost的不足之处主要有:

  1)每轮迭代时,都须要遍历整个训练数据屡次。若是把整个训练数据装进内存则会限制训练数据的大小;若是不装进内存,反复地读写训练数据又会消耗很是大的时间。

  2)预排序方法的时间和空间的消耗都很大

三、LightGBM原理

  1)直方图算法

  直方图算法的基本思想是先把连续的浮点特征值离散化成$k$个整数,同时构造一个宽度为$k$的直方图。在遍历数据的时候,根据离散化后的值做为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了须要的统计量,而后根据直方图的离散值,遍历寻找最优的分割点。在XGBoost中须要遍历全部离散化的值,而在这里只要遍历$k$个直方图的值。

  

  使用直方图算法有不少优势。首先,最明显就是内存消耗的下降,直方图算法不只不须要额外存储预排序的结果,并且能够只保存特征离散化后的值。

  

  而后在计算上的代价也大幅下降,XGBoost预排序算法每遍历一个特征值就须要计算一次分裂的增益,而直方图算法只须要计算$k$次($k$能够认为是常数),时间复杂度从O(#data * #feature) 优化到O(k* #features)。
  固然,Histogram算法并非完美的。因为特征被离散化后,找到的并非很精确的分割点,因此会对结果产生影响。但在不一样的数据集上的结果代表,离散化的分割点对最终的精度影响并非很大,甚至有时候会更好一点。缘由是决策树原本就是弱模型,分割点是否是精确并非过重要;较粗的分割点也有正则化的效果,能够有效地防止过拟合;即便单棵树的训练偏差比精确分割的算法稍大,但在梯度提高(Gradient Boosting)的框架下没有太大的影响。

  2)LightGBM的直方图作差加速

  一个容易观察到的现象:一个叶子的直方图能够由它的父亲节点的直方图与它兄弟的直方图作差获得。一般构造直方图,须要遍历该叶子上的全部数据,但直方图作差仅需遍历直方图的k个桶。利用这个方法,LightGBM能够在构造一个叶子的直方图后(父节点在上一轮就已经计算出来了),能够用很是微小的代价获得它兄弟叶子的直方图,在速度上能够提高一倍。

   

  3)带深度限制的Leaf-wise的叶子生长策略

  Level-wise过一次数据能够同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效的算法,由于它不加区分的对待同一层的叶子,带来了不少不必的开销,由于实际上不少叶子的分裂增益较低,不必进行搜索和分裂。

  

  Leaf-wise则是一种更为高效的策略,每次从当前全部叶子中,找到分裂增益最大的一个叶子,而后分裂,如此循环。所以同Level-wise相比,在分裂次数相同的状况下,Leaf-wise能够下降更多的偏差,获得更好的精度。Leaf-wise的缺点是可能会长出比较深的决策树,产生过拟合。所以LightGBM在Leaf-wise之上增长了一个最大深度的限制,在保证高效率的同时防止过拟合。 

  

  4)直接支持类别特征(即不须要作one-hot编码)

  实际上大多数机器学习工具都没法直接支持类别特征,通常须要把类别特征,转化到多维的one-hot编码特征,下降了空间和时间的效率。而类别特征的使用是在实践中很经常使用的。基于这个考虑,LightGBM优化了对类别特征的支持,能够直接输入类别特征,不须要额外的one-hot编码展开。并在决策树算法上增长了类别特征的决策规则。在Expo数据集上的实验,相比0/1展开的方法,训练速度能够加速8倍,而且精度一致。

  

  5)直接支持高效并行

  LightGBM还具备支持高效并行的优势。LightGBM原生支持并行学习,目前支持特征并行和数据并行的两种。
  1)特征并行的主要思想是在不一样机器在不一样的特征集合上分别寻找最优的分割点,而后在机器间同步最优的分割点。
  2)数据并行则是让不一样的机器先在本地构造直方图,而后进行全局的合并,最后在合并的直方图上面寻找最优分割点。
  LightGBM针对这两种并行方法都作了优化,在特征并行算法中,经过在本地保存所有数据避免对数据切分结果的通讯;在数据并行中使用分散规约 (Reduce scatter) 把直方图合并的任务分摊到不一样的机器,下降通讯和计算,并利用直方图作差,进一步减小了一半的通讯量。 

  

  

 

四、LightGBM参数调优

  下面几张表为重要参数的含义和如何应用

  

  

  

  接下来是调参

  

  下表对应了Faster Spread,better accuracy,over-fitting三种目的时,能够调整的参数

  

 

参考文献:

  https://zhuanlan.zhihu.com/p/25308051

  http://www.javashuo.com/article/p-whoksaxr-mo.html

  https://www.jianshu.com/p/b4ac0596e5ef