LightGBM三部曲:LightGBM原理

机器学习算法人工智能与算法

一直想把XGBoost和LightGBM的原理及应用梳理完分享给大家,但是内容有点多,也有些存疑的点在慢慢厘清,这篇文章也是断断续续在整理。

今天终于梳理完Lightgbm原理啦,希望对大家有帮助。

对XGBoost原理、参数详解、实战感兴趣可翻看历史文章:XGBoost三部曲:XGBoost原理XGBoost三部曲:XGBoost参数详解XGBoost三部曲:XGBoost实战

LigthGBM是微软开发的一款高性能梯度提升框架,是一种集成学习算法,属于Boosting类型,通过叠加多个决策树的预测结果得出最终的预测结果。

这个算法基于GBDT,对树模型基础知识不了解的小伙伴可以翻看之前的文章:Python中调用sklearn决策树一文弄懂随机森林的原理和应用一文弄懂GBDT原理和应用

本文目录

  1. 名词解释
  2. 为什么需要LightGBM
  3. 核心引擎:损失函数求解与叶子节点生成

3.1 LightGBM算法原理理解简单案例

3.2 LightGBM算法原理公式推导 4. 核心创新原理

4.1 基于直方图的决策树算法

4.2 单边梯度采样

4.3 互斥特征捆绑 5. 其他优化技术

5.1 叶子生长策略

5.2 直接支持类别特征 6. 性能对比

  1. 适用场景

一、名词解释

picture.image

集成学习 :通过构建并结合多个机器学习模型来改善模型的性能。通过训练多个模型,并将它们的预测结果进行某种方式的结合,通常可以得到比单一模型更好的预测结果。

Bagging :是Bootstrap Aggregating的缩写,是一种通过结合多个模型的预测结果来减少模型方差的方法。在Bagging中,每个模型都是在原始数据集的随机子集上进行训练的,这些随机子集是通过有放回的抽样得到的。然后,所有模型的预测结果通过投票(对于分类问题)或平均(对于回归问题)的方式进行结合,典型的代表是随机森林。

Boosting :基本思想是三个臭皮匠赛过诸葛亮。算法思路是采用串行的方式训练基分类器,每一层在训练时,给前一层基分类器分错的样本更高的权重,最后把各层分类器的结果层层加权叠加得到最终的结果。

GBDT :是Gradient Boosting Decision Tree的缩写,是一种基于决策树的集成学习算法,也是一种迭代式的boosting算法。基本原理是迭代地训练决策树,每次训练都基于之前训练结果来进行优化。训练过程基于梯度下降的思想,使用了加法模型和函数优化方法。

XGBoost :是eXtreme Gradient Boosting的缩写,是一个优化的分布式梯度增强库,是梯度提升算法的一种高效实现。它的核心在于将许多弱分类器(通常是决策树)组合成一个强大的分类器。每一个新的弱分类器都致力于纠正之前所有弱分类器的错误,通过不断迭代,逐步提升模型的准确性。

LightGBM :是Light Gradient Boosting Machine是微软开发的一款高性能梯度提升框架,核心是 “梯度提升树(GBDT)” 的一种高效实现,其模型结构是加法模型 ,即最终预测结果由多棵决策树的输出累加得到。

二、为什么需要LightGBM

picture.image

传统的GBDT(Gradient Boosting Decision Tree)算法虽然有效,但在处理大规模数据时面临两个挑战:

1.计算效率低:需要遍历所有数据点计算分裂点。

2.内存消耗大:需要保存整个数据集的特征值和梯度信息。

LightGBM通过三大技术创新解决了这些问题。

三、核心引擎:损失函数求解与叶子节点生成picture.image

要理解LightGBM如何学习,关键在于弄明白两个问题:

①如何衡量一颗树的好坏?—>通过损失函数。

②如何生成一颗好的树?—>通过优化损失函数来分裂叶子节点。

接下来对LightGBM的算法原理进行详细拆解。

1 LightGBM算法原理理解简单案例

为了大家能直观地感受LightGBM的算法流程,先看一个简单的例子。

我们应用LightGBM算法预测客户的年龄,假设客户的真实年龄为40岁,通过训练弱学习器1(决策树1),得到客户的预测年龄为30岁,此时预测年龄和真实年龄差值为10岁(残差)。接着训练弱学习器2来拟合残差10岁,依次类推,直到残差值小于给定的阈值。

picture.image

LightGBM算法的核心是对残差进行预测,上图预测年龄的最终结果是:30+5+3+1=40岁。

这种思想有点类似我们考试对错题的梳理。首先做一张卷子,然后对卷子进行评估,把错题挑出来,对做错的题重点突破,再对错题进行一轮测试,然后把再次做错的题挑出来,进行重点突破,再对错题进行测试,以此类推,最终的得分是所有轮次得分的和。

2 LightGBM算法原理公式推导

上面从感性的角度对LightGBM原理进行了介绍,本节从理性的角度出发,对LightGBM算法原理进行数学推导。

为了大家更轻松地理解后续公式推导,可以先翻看GBDT的算法原理推导文章:一文弄懂GBDT原理和应用

接着进入本文的核心,LightGBM原理推导。

首先介绍LightGBM算法的目标函数,再逐步拆解如何求目标函数的最小值。

2.1 目标函数

LightGBM和GBDT一样通过串行训练多棵决策树来生成集成模型,通过不断地进行特征分裂来生长一颗新树,去拟合上次预测的残差。

我们的目标是训练足够多的树让残差越小,即让树群的预测值尽量接近真实值,并且有足够大的泛化能力。

LightGBM的目标函数在GBDT的基础上引入了正则项,可以表示为:

picture.image

即目标函数分为两部分:加号前面表示损失函数(控制训练误差,即预测值和真实值的差值),加号后面表示正则项(控制模型复杂度)。

一般来说,损失函数让模型尽可能地去拟合训练数据,使得模型有较少的偏差。而正则项鼓励更加简单的模型,让有限的数据拟合出来的结果随机性比较小,不容易过拟合,使得最后模型的预测更加稳定。

即满足了我们的目标,预测值尽量接近真实值,并且有足够大的泛化能力。

2.2 损失函数

目标函数的第一部分即损失函数:

picture.image 其中i表示第i个样本,yi表示第i个样本的真实值,逗号后面的y表示第i个样本的预测值。

整体表示n个样本的预测误差和,我们的目标是希望整体预测误差越小越好。

之前提到,LightGBM每一次迭代,是在前一轮迭代的基础上,通过新增一颗树去拟合上次预测的残差。

故前t颗树的预测值,可以拆分成前t-1颗树的预测值加上第t颗树的预测值。

picture.image 把上面的式子进行二阶泰勒展开:

picture.image

把第t颗树的预测值当成Δx,损失函数可展开成:

picture.image

picture.image 则损失函数可进一步写成:

picture.image 由于第t颗回归树是根据前面t-1颗回归树的残差训练得到的,即在第t轮训练时t-1颗树对应的预测值

picture.image

是已知值,即

picture.image

是已知值,在对目前函数求最小值时可以去掉。

即目标函数可以写成:

picture.image

2.3 正则项

目标函数的第二部分即正则项:

picture.image 它定义的是树的复杂度。

为了理解这个公式,我们先定义一颗树。

picture.image 1.每个样本通过对特征进行划分后,最终会落到一个叶子节点上。

2.q(x)对应的数值,表示样本x在该数值对应的叶子结点上。上图中一共有3个叶子结点,q(x)=3,表示样本x落在第3个叶子结点上。

3.wq(x)对应该节点的打分,或者叫该样本的模型预测值。如w2=0.1,表示落在第2个叶子结点的样本模型预测值为0.1。

4.一颗树中叶子节点的个数称为T。

有了上述定义后,我们来看下第t颗树正则项的定义。

picture.image

其中γ表示结点切分的难度,也可以理解成控制叶子结点个数的约束项,防止树在生长过程中过拟合。

λ表示L2正则化系数,约束单颗树的模型预测值不会在所有树中占比过高,也能防止模型过拟合。

假设我们训练了t颗树,则模型正则项可以写成前t-1颗树正则项的和加上第t颗树正则项。

故目标函数的第二部分正则项可以写成:

picture.image

由于在训练第t颗树时,前t-1颗树已经训练完成,所以前t-1颗树的叶子结点个数,以及每个叶子结点对应的wq(x)都是已知值。

故在第t轮训练中,前t-1颗树的正则项是常值,在求最值时可以去掉。

故目标函数可由:

picture.image

进一步写成:

picture.image 把预测值替换成wq(x)的形式,并代入正则项公式,可得:

picture.image 把对样本求和,改写成对叶子结点求和,可得:

picture.image 其中j从1到T,表示叶子结点的个数,Ij为叶子结点中样本下标的集合,即Ij={i|q(xi)=j},即每个样本xi都能通过函数q(xi)映射到树的某个叶子结点。

上式合并同类项可得:

picture.image

picture.image 其中Gj表示叶子结点j所包含样本的一阶偏导数累加和,Hj表示叶子结点j所包含样本的二阶偏导数累加和,都是是常量。

可得:

picture.image 上式中Gj、Hj、λ、γ、T都是常数,wj是变量,求最值时,可以当成一元二次方程进行求解。

Hj二阶可导,故函数是凸函数,故Hj大于0,同时λ大于0,故一元二次方程中a大于0,函数开口向上。

目标函数在

picture.image 处取得最小值,即为最优解。

把最优解代入目标函数,可得:

picture.image

2.4 打分函数的计算

当我们确定了一颗树的结构时,就可以根据刚刚推导出来的目标函数公式求得目标函数值。

picture.image

且目标函数值越小,说明树的结构越好。

2.5 如何确定树结构

前面已经详细介绍了LightGBM算法原理以及打分函数的计算。明白只要知道树的结构,就能得到该结构下的最好分数。

那如何确定树的结构呢?答案是贪心地寻找最佳分裂点。

  • 分裂前 ,所有样本在一个节点中,假设其损失分数为Score_before。

  • 尝试某个特征和分裂点 ,将样本划分到左、右两个子节点。计算分裂后的损失分数Score_after。

  • 分裂带来的增益(Gain)就是损失分数的减少量:Gain = Score_before - (Score_left + Score_right)

    LightGBM的分裂决策 :它会遍历所有可能的分裂点(在直方图上遍历桶),选择 增益Gain最大 的那个分裂点。

只有当最大增益大于0(即分裂确实能降低损失)时,才会进行分裂。参数γ在这里起到了预剪枝的作用。

四、核心创新原理

picture.image LightGBM相较于XGBoost算法,核心创新包括:直方图、单边梯度采样、互斥特征捆绑。接下来一一介绍。

1 基于直方图的决策树算法

将连续的浮点特征离散成k个整数,并构造宽度为k的Histogram,然后遍历训练数据,统计每个离散值在直方图中的累计统计值。

在进行特征选择时,只要根据直方图的离散值,遍历寻找最优的分割点。

这样做的优点是:

  • 降低内存使用:只需存储离散化后的值。
  • 减少计算量:从O(#data × #features)降到O(k × #features)。
  • 增加缓存命中率:顺序访问离散化值。

需要注意的是:使用bin替代原始数据相当于增加了正则化。

①使用bin意味者更多细节特征被丢弃,相似的数据可能被划分到了相同的桶里。

②bin数量选择决定了正则化的程度,bin越少惩罚越重,欠拟合风险越高。

③直方图除了保存划分阈值和当前bin内样本数外,还保存了当前bin内所有样本的一阶梯度。

④阈值的选择是按照直方图从小到大遍历,使用了上面的一阶梯度和,目的是得到划分loss最大的特征及阈值。

2 单边梯度采样

Goss(Gradient-based One-Side Sampling)算法从减少样本的角度出发,排除大部分小梯度的样本,仅用剩下的样本计算信息增益,它是一种在减少数据量和保证精度上平衡的算法。

算法流程:

①Goss首先将要进行分裂的特征的所有取值按照绝对值大小降序排序(XGBoost一样也进行了排序,但是LightGBM不用保存排序后的结果),选取绝对值最大的a%*100%个数据。

②然后在剩下的较小梯度数据中选择b*100%个数据。

③接着将这b*100%个数据乘以一个常数(1-a)/b,这样算法就会更关注训练不足的样本,而不会过多改变原数据集的分布。

④最后使用这(a+b)*100%个数据来计算信息增益。

总的来说,保留梯度较大的样本,随机采样梯度较小的样本,在计算信息增益时对采样数据引入常数乘子进行补偿,这样既保持了数据分布的准确性,又大幅减少了计算量。

3 互斥特征捆绑

高维特征的数据往往是稀疏的(特征互斥不会同时取非零值),这种稀疏性启发我们设计一种无损的方法(图着色)来减少特征的维度。

算法步骤如下:

①将特征按照非零值的个数进行排序。

②计算不同特征之间的冲突比例。

③遍历每个特征并尝试合并特征,使冲突比率最小化。

④将特征直方图合并为捆绑特征的直方图。

这样特征数量从N减少到M,显著降低计算复杂度。

五、其他优化技术

picture.image LightGBM还调整了叶子生长策略,并直接支持类别特征,具体介绍如下:

1 叶子生长策略

与传统GBDT的水平生长方式不同,LightGBM采用如下叶子生长策略:

  • 每次从当前所有叶子中,选择分裂增益最大的叶子进行分裂。

  • 在分裂次数相同的情况下,能获得更好的精度。

  • 可能导致过拟合,可通过max_depth参数控制。

2 直接支持类别特征

无需one-hot编码,LightGBM采用了many vs many的切分方法,实现了类别特征的最优切分。

算法流程:

①在枚举分割点之前,先把直方图按每个类别的label均值进行排序。

②按照排序的结果依次枚举最优分割点。

六、性能对比

picture.image 与XGBoost相比,LightGBM具有明显优势:

  • 训练速度提升2-10倍。

  • 内存消耗降低30-50%。

  • 准确率相当甚至更高。

  • 支持并行和GPU学习。

七、适用场景

picture.image LightGBM特别适用于:

  • 大规模数据集(百万级以上样本)。
  • 高维特征数据(千级以上特征)。
  • 需要快速训练的实时应用场景。
  • 计算资源有限的环境。

LightGBM不仅通过直方图算法、单边梯度采样和互斥特征捆绑三大核心技术实现了效率的飞跃。

其背后坚实的数学基础— 基于泰勒展开的损失函数求解和基于增益的叶子节点分裂策略, 构成了其强大性能的核心引擎。

这使其成为处理大规模数据时兼顾精度与速度的首选梯度提升框架。

后续我们将深入讲解LightGBM的参数和实战应用,敬请期待!

对风控建模感兴趣的小伙伴欢迎加群讨论。

【进群】 分群讨论学习Python、玩转Python、风控建模【29.9元进】、人工智能、数据分析相关问题,还提供招聘内推信息、优秀文章、学习视频、公众号文章答疑,也可交流工作中遇到的难题。如需添加微信号19967879837,加时备注想进的群,比如风控建模。

  
参考文献  
https://zhuanlan.zhihu.com/p/1903224259901358108  
https://blog.csdn.net/qq_70350287/article/details/150075547  
https://blog.csdn.net/qq_32623363/article/details/113478904  
https://xfyun.csdn.net/68c37a299fb7310a2c2a75ee.html?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-6-134108203-blog-150075547.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-6-134108203-blog-150075547.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=12  
https://wenku.csdn.net/column/7ceotsdfb0?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-c_download-2%7Edefault%7EOPENSEARCH%7EPosition-19-1pzrgpqy4d-blog-150075547.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant.none-task-c_download-2%7Edefault%7EOPENSEARCH%7EPosition-19-1pzrgpqy4d-blog-150075547.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=19  
https://mcp.csdn.net/68006fbda5baf817cf491f5a.html?spm=1001.2101.3001.6650.16&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-16-83659932-blog-150075547.235%5Ev43%5Epc_blog_bottom_relevance_base7&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7Eactivity-16-83659932-blog-150075547.235%5Ev43%5Epc_blog_bottom_relevance_base7&utm_relevant_index=22

往期回顾:

一文弄懂GBDT原理和应用

一文弄懂随机森林的原理和应用

一文囊括Python中的函数,持续更新。。。

一文囊括Python中的有趣案例,持续更新。。。

一文囊括Python中的数据分析与绘图,持续更新。。。

一文囊括风控模型搭建(原理+Python实现),持续更新。。。

picture.image

picture.image

限时免费加群

19967879837

添加 微信号、手机号

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论