Task4 LightGBM算法梳理

文章目录

    • Task4 LightGBM算法梳理
      • 1. LightGBM
      • 2. LightGBM的起源
      • 3. Histogram VS pre-sorted
      • 4. leaf-wise VS level-wise
      • 5. 特征并行和数据并行
      • 6. 顺序访问梯度
      • 7. 支持类别特征
      • 8. 应用场景
      • 9. LightGBM参数
      • 10. CatBoost(了解)

Task4 LightGBM算法梳理

LightGBM介绍及参数调优
LightGBM——提升机器算法(图解+理论+安装方法+python代码)

LightGBM 中文文档
LightGBM 中文文档 github

1. LightGBM

  • LightGBM是一种使用基于树的学习算法的梯度提升框架。它具有以下优点,具有分布式和高效性:

    • 更快的培训速度和更高的效率。
    • 降低内存使用率。
    • 更准确。
    • 支持并行和GPU学习。
    • 能够处理大规模数据。
  • 下面这个表格给出了XGBoost和LightGBM之间更加细致的性能对比,包括了树的生长方式,LightGBM是直接去选择获得最大收益的结点来展开,而XGBoost是通过按层增长的方式来做,这样呢LightGBM能够在更小的计算代价上建立我们需要的决策树。当然在这样的算法中我们也需要控制树的深度和每个叶子结点的最小数据量,从而减少过拟合。

XGBoost LightGBM
树木生长算法 按层生长的方式
有利于工程优化,但对学习模型效率不高
直接选择最大收益的节点来展开,在更小的计算代价上去选择我们需要的决策树
控制树的深度和每个叶子节点的数据量,能减少过拟合
划分点搜索算法 特征预排序的方法 直方图算法:将特征值分成许多小筒,进而在筒上搜索分裂点,减少了计算代价和存储代价,得到更好的性能。另外数据结构的变化使得在细节处的变化理上效率会不同
内存开销 8个字节 1个字节
划分的计算增益 数据特征 容器特征
高速缓存优化 在Higgs数据集上加速40%
类别特征处理 在Expo数据集上速度快了8倍

2. LightGBM的起源

官方主页
Github主页
LightGBM大战XGBoost

3. Histogram VS pre-sorted

LightGBM介绍及参数调优

  • Histogram算法并不是完美的。由于特征被离散化后,找到的并不是很精确的分割点,所以会对结果产生影响。但在实际的数据集上表明,离散化的分裂点对最终的精度影响并不大,甚至会好一些。原因在于decision tree本身就是一个弱学习器,采用Histogram算法会起到正则化的效果,有效地防止模型的过拟合。
  • 时间上的开销由原来的O(#data * #features)降到O(k * #features)。由于离散化,#bin远小于#data,因此时间上有很大的提升。
  • Histogram算法还可以进一步加速。一个叶子节点的Histogram可以直接由父节点的Histogram和兄弟节点的Histogram做差得到。一般情况下,构造Histogram需要遍历该叶子上的所有数据,通过该方法,只需要遍历Histogram的k个捅。速度提升了一倍。

4. leaf-wise VS level-wise

LightGBM介绍及参数调优

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

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

5. 特征并行和数据并行

LightGBM的并行优化

LightGBM原生支持并行学习,目前支持
特征并行(Featrue Parallelization)
数据并行(Data Parallelization)
基于投票的数据并行(Voting Parallelization)

  • 特征并行的主要思想是在不同机器、在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
  • 数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。

LightGBM针对这两种并行方法都做了优化。

  • 特征并行算法中,通过*在本地保存全部数据 *避免对数据切分结果的通信。
  • 数据并行中使用分散规约 (Reduce scatter) 把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。
  • 基于投票的数据并行(Voting Parallelization)则进一步优化数据并行中的通信代价,使通信代价变成常数级别。在数据量很大的时候,使用投票并行可以得到非常好的加速效果。

6. 顺序访问梯度

  • 预排序算法中有两个频繁的操作会导致cache-miss(缓存未命中),也就是缓存消失。
    (对速度的影响很大,特别是数据量很大的时候,顺序访问比随机访问的速度快4倍以上 )。

    • 对梯度的访问:在计算增益的时候需要利用梯度,对于不同的特征,访问梯度的顺序是不一样的,并且是随机的
    • 对于索引表的访问:预排序算法使用了行号和叶子节点号的索引表,防止数据切分的时候对所有的特征进行切分。同访问梯度一样,所有的特征都要通过访问这个索引表来索引。
      这两个操作都是随机的访问,会给系统性能带来非常大的下降。
  • LightGBM使用的直方图算法能很好的解决这类问题。

    • 首先。对梯度的访问,因为不用对特征进行排序
    • 同时,所有的特征都用同样的方式来访问
    • 所以只需要对梯度访问的顺序进行重新排序,所有的特征都能连续的访问梯度。
    • 并且直方图算法不需要把数据id到叶子节点号上(不需要这个索引表,没有这个缓存消失问题)

7. 支持类别特征

传统的机器学习一般不能支持直接输入类别特征,需要先转化成多维的0-1特征,这样无论在空间上还是时间上效率都不高。LightGBM通过更改决策树算法的决策规则,直接原生支持类别特征,不需要转化,提高了近8倍的速度。
支持类别特征

  • 当使用本地分类特征,LightGBM 能提供良好的精确度。不像简单的 one-hot 编码,LightGBM 可以找到分类特征的最优分割。 相对于 one-hot 编码结果,LightGBM 可以提供更加准确的最优分割。
  • 用 categorical_feature 指定分类特征 参考 Parameters 的参数 categorical_feature
  • 首先需要转换为 int 类型,并且只支持非负数。 将其转换为连续范围更好。
  • 使用 min_data_per_group, cat_smooth 去处理过拟合(当 #data 比较小,或者 #category 比较大)
  • 对于具有高基数的分类特征(#category 比较大), 最好把它转化为数字特征。

8. 应用场景

机器学习挑战获胜解决方案
Task4 LightGBM算法梳理_第1张图片

9. LightGBM参数

官方参数

  • 核心参数
  • 学习控制参数
  • IO参数
  • 目标参数
  • 度量参数
  • 网络参数
  • GPU参数

10. CatBoost(了解)

2014 年 3 月,XGBOOST 最早作为研究项目,由陈天奇提出
2017 年 1 月,微软发布首个稳定版 LightGBM
2017 年 4 月,俄罗斯顶尖技术公司 Yandex 开源 CatBoost
CatBoost官网

你可能感兴趣的:(集成学习,机器学习)