数学推导+纯Python实现机器学习算法18:LightGBM

本文深入解析LightGBM算法,一种比XGBoost更快更高效的Boosting框架。文章介绍了Histogram、GOSS、EFB三大核心优化算法,以及Leaf-Wise生长策略,展示了LightGBM在特征分裂点、样本数量和特征数量上的优化,并提供了Python实现示例。

Python机器学习算法实现

Author:louwill

Machine Learning Lab

     

    第17讲我们谈到了竞赛大杀器XGBoost,本篇我们来看一种比XGBoost还要犀利的Boosting算法——LightGBM。LightGBM全称为轻量的梯度提升机(Light Gradient Boosting Machine),由微软于2017年开源出来的一款SOTA Boosting算法框架。跟XGBoost一样,LightGBM也是GBDT算法框架的一种工程实现,不过更加快速和高效。

XGBoost可优化的地方

    XGBoost通过预排序的算法来寻找特征的最佳分裂点,虽然预排序算法能够准确的找出特征的分裂点,但该方法占用空间的代价太大,在数据量和特征量都比较多的情况下,会严重影响算法性能。XGBoost寻找最佳分裂点的算法复杂度可以估计为:

复杂度=特征数量*特征分裂点的数量*样本数量

    既然XGBoost的复杂度是由特征数量、特征分裂点的数量和样本数量所决定的,那么LightGBM的优化空间自然是从这三个角度来考虑。LightGBM总体上仍然属于GBDT算法框架,关于GBDT算法特征我们已经在第15篇的时候重点叙述过,这里不再重复。我们重点梳理上述三个优化角度的基本原理即可。

Histogram算法

    为了减少特征分裂点的数量和更加高效寻找最佳特征分裂点,LightGBM区别于XGBoost的预排序算法,采用Histogram直方图的算法寻找最佳特征分裂点。其基本想法是将连续的浮点特征值进行离散化为k个整数并构造一个宽度为k的直方图。对某个特征数据进行遍历的时候,将离散化后的值用为索引作为直方图的累积统计量。遍历完一次后,直方图便可累积对应的统计量,然后根据该直方图寻找最佳分裂点。直方图算法如下图所示。

    直方图算法并不什么特别的创新之举,本质上就是一种数据离散化和分箱操作,但架不住速度快性能优,计算代价和内存占用都大大减少。

    直方图另外一个好处在于差加速。一个叶子节点的直方图可由其父节点的直方图与其兄弟节点的直方图做差得到,这也可以加速特征节点分裂。

    所以,从特征寻找最优分裂点角度,LightGBM使用了直方图算法进行优化。完整的直方图算法流程如下伪代码所示:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值