LightGBM简介

1、LightGBM简介

    LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法思想的框架,由微软DMTK团队开源的boosting decision tree工具。

1.1 GBDT简介

    GBDT(Gradient Boosting Decision Tree)指的是梯度提升决策树,在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一,在分类与回归比赛中深受选手喜爱,
    GBDT主要思想是以减小残差为目标函数,迭代训练弱分类器,最终将弱分类器经过加法模型进行线性组合来进行数据分类或回归的算法。
    GBDT所采用的弱分类器主要就是CART TREE(决策树),由于要求弱分类器低方差、高偏差,所以决策树的深度要求不要太深,而最终的分类器是将每轮训练得到的弱分类器加权求和得到的。
在这里插入图片描述

    在回归分析中,通常用残差分析来判断回归模型的拟合效果。残差分析的常用方法:通过一般指数判断,如下面公式。一般R平方越大,残差平方和越小,从而回归模型的拟合效果越好。
在这里插入图片描述

决策树的演化:

    特征选择:信息增益(信息增益=经验熵-条件熵),但是偏向于选择取值较多的特征–选择信息增益比
CART是分类与回归树,分类树采用基尼系数最小化,回归树采用平方误差最小化准则

    常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制。而GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。
    LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。

2、XGBoost

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

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

    这样的预排序算法的优点是能精确地找到分割点。但是缺点也很明显:
首先,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如,为了后续快速的计算分割点,保存了排序后的索引),这就需要消耗训练数据两倍的内存。

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

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

    为了避免上述XGBoost的缺陷,并且能够在不损害准确率的条件下加快GBDT模型的训练速度,lightGBM在传统的GBDT算法上进行了如下优化:
基于Histogram的决策树算法。
    单边梯度采样 Gradient-based One-Side Sampling(GOSS):使用GOSS可以减少大量只具有小梯度的数据实例,这样在计算信息增益的时候只利用剩下的具有高梯度的数据就可以了,相比XGBoost遍历所有特征值节省了不少时间和空间上的开销。
    互斥特征捆绑 Exclusive Feature Bundling(EFB):使用EFB可以将许多互斥的特征绑定为一个特征,这样达到了降维的目的。
    带深度限制的Leaf-wise的叶子生长策略:大多数GBDT工具使用低效的按层生长 (level-wise)的决策树生长策略,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销。实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。LightGBM使用了带有深度限制的按叶子生长 (leaf-wise) 算法。

直接支持类别特征(Categorical Feature)
支持高效并行
Cache命中率优化

    下面我们就详细介绍以上提到的lightGBM优化算法。

3、LightGBM原理

    与XGBoost类似,他也是一个gradient boosting的框架,设计初衷是并行与高效。它具有训练速度快,内存使用少,处理了类别特征,大大加快了训练速度,也有更好的模型精度。

    htGBM的细节技术讲解
    lgb采用的是生长方法是leaf-wise learning,减少了计算量,当然这样的算下下也需要控制树的深度和每个叶节点的最小的数据量,从而减少over fit。分裂点,xgb采取的是预排序的方法,而lgb采取的是histogram算法,即将特征值分为很多小桶,直接在这些桶上寻找分类,这样带来了存储代价和计算代价等方面的缩小,从而得到更好的性能。
    另外,数据结构的变化也使得细节处理方面效率有所不同,比如对缓存的利用,lgb更加高效。从而使得它右很好的加速性能,特别是类别特征处理,也使得lgb在特定的数据集上有非常大的提升。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李霁明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值