机器学习算法之LightGBM

LightGBM

在很多方面会比XGBoost表现的更为优秀。它有以下优势:

  • 更快的训练效率
  • 低内存使用
  • 更高的准确率
  • 支持并行化学习
  • 可处理大规模数据
  • 支持直接使用category特征

从下图实验数据可以看出, LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6,并且准确率也有提升。

机器学习算法之LightGBM_第1张图片

LightGBM的应用

LightGBM在机器学习与数据挖掘领域有着极为广泛的应用。据统计LightGBM模型自2016到2019年在Kaggle平台上累积获得数据竞赛前三名三十余次,其中包括CIKM2017 AnalytiCup、IEEE Fraud Detection等知名竞赛。这些竞赛来源于各行各业的真实业务,这些竞赛成绩表明LightGBM具有很好的可扩展性,在各类不同问题上都可以取得非常好的效果。

同时,LightGBM还被成功应用在工业界与学术界的各种问题中。例如金融风控、购买行为识别、交通流量预测、环境声音分类、基因分类、生物成分分析等诸多领域。虽然领域相关的数据分析和特性工程在这些解决方案中也发挥了重要作用,但学习者与实践者对LightGBM的一致选择表明了这一软件包的影响力与重要性。

1.2 XGBoost的缺点及LightGBM的优化

(1)XGBoost的缺点

在LightGBM提出之前,最有名的GBDT工具就是XGBoost了,它是基于预排序方法的决策树算法。这种构建决策树的算法基本思想是:

  • 首先,对所有特征都按照特征的数值进行预排序。
  • 其次,在遍历分割点的时候用O(#data)的代价找到一个特征上的最好分割点。
  • 最后,在找到一个特征的最好分割点后,将数据分裂成左右子节点。

这样的预排序算法的优点是能精确地找到分割点。但是缺点也很明显:

首先,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如,为了后续快速的计算分割点,保存了排序后的索引),这就需要消耗训练数据两倍的内存。

其次,时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。

最后,对cache优化不友好。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对cache进行优化。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的cache miss。

 

2. LightGBM的基本原理

2.1 基于Histogram的决策树算法

(1)直方图算法

Histogram algorithm应该翻译为直方图算法,直方图算法的基本思想是:先把连续的浮点特征值离散化成 K K K个整数,同时构造一个宽度为 K K K的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

机器学习算法之LightGBM_第2张图片

  • 内存占用更小:直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用 8 8 8位整型存储就足够了,内存消耗可以降低为原来的 1 / 8 1/8 1/8。也就是说XGBoost需要用 32 32 32位的浮点数去存储特征值,并用 32 32 32位的整形去存储索引,而 LightGBM只需要用 32 32 32位去存储直方图,内存相当于减少为 1 / 8 1/8 1/8;

  • 计算代价更小:预排序算法XGBoost每遍历一个特征值就需要计算一次分裂的增益,而直方图 算法LightGBM只需要计算 k k k 次( k k k 可以认为是常数),直接将时间复杂度从 O ( #  data  ∗ #  feature  ) O(\# \text { data } * \# \text { feature }) O(# data ∗# feature ) 降低到 O ( k ∗ #  feature  ) , O(k * \# \text { feature }), O(k∗# feature ), 而我们为道 # d a t a > > k \# d a t a>>k #data>>

学习到的新知识

这种可视化更便于观察数据

机器学习算法之LightGBM_第3张图片

机器学习算法之LightGBM_第4张图片

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