欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > LightGBM与GBDT:原理、关系及应用

LightGBM与GBDT:原理、关系及应用

2025/5/1 22:18:27 来源:https://blog.csdn.net/weixin_55252589/article/details/144947414  浏览:    关键词:LightGBM与GBDT:原理、关系及应用

一、LightGBM的原理与算法特点

(一)基于直方图的算法

传统决策树在分裂节点时,需对每个特征的每个取值进行排序和扫描以计算最佳分裂点。而LightGBM采用直方图算法,将连续的特征值离散化到固定数量的bins(桶)中。例如,对于一个取值范围为[0, 100]的特征,若设定bins数量为10,会将其划分为[0, 10)、[10, 20)等10个区间。在计算分裂增益时,只需在这些离散的bins上进行操作,大大减少了计算量。同时,通过直方图做差加速,在计算叶子节点的直方图时,可利用父节点和兄弟节点的直方图做差得到,进一步提高了效率。

(二)带深度限制的叶节点生长策略

LightGBM采用leaf - wise(叶节点优先)的生长策略,每次从当前叶子节点中找到分裂增益最大的节点进行分裂。这与传统的level - wise(层序)生长策略不同,level - wise是同时分裂同一层的所有节点。leaf - wise生长方式能够更快地降低损失函数,但可能会导致过拟合。为避免过拟合,LightGBM设置了最大深度限制,确保模型不会过度复杂。

(三)支持类别特征直接处理

LightGBM可以直接处理类别特征,无需像其他算法那样进行独热编码(One - Hot Encoding)。例如,对于一个颜色特征,其取值可能是红、绿、蓝。LightGBM通过一种特殊的编码方式将类别特征转化为数值特征,有效地利用了类别特征中的信息,同时减少了内存消耗和计算时间。

二、LightGBM的优势

(一)训练速度快

由于直方图算法和高效的叶节点生长策略,LightGBM的训练速度相比传统的梯度提升算法(如XGBo ost)有显著提升。在大规模数据集上,这种速度优势更加明显。例如,在一个包含数百万条数据的数据集上进行模型训练,LightGBM可能只需XGBoost一半的时间。

(二)内存占用少

其直方图算法和对类别特征的有效处理方式,使得在训练过程中内存占用量降低。特别是对于高维数据和大规模数据集,能够更有效地利用内存资源,从而可以在资源有限的环境中进行训练。

(三)准确性高

尽管训练速度快且内存占用少,LightGBM在许多数据集上仍能保持较高的准确性。这得益于其合理的分裂策略和对特征的有效利用,能够挖掘数据中的复杂关系,在分类和回归任务中都有出色表现。

三、LightGBM的应用场景

(一)数据分类任务

在图像分类、文本分类等领域广泛应用。比如在文本情感分类中,将文本转换为特征向量后,使用LightGBM模型来判断文本是正面情感还是负面情感。通过对大量标注好的文本数据进行训练,模型可以学习到不同词汇和句子结构与情感之间的关系。

(二)数据回归任务

例如在预测房价的任务中,以房屋的面积、房龄、周边配套设施等特征作为输入,房价作为输出,LightGBM可以学习这些特征与房价之间的复杂函数关系,从而对房价进行准确的预测。

四、LightGBM的使用示例

首先安装LightGBM库,使用pip install lightgbm命令进行安装。以下是一个简单的分类任务示例:

import lightgbm as lgb
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score#加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target#划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)#转换为LightGBM数据集格式
lgb_train = lgb.Dataset(X_train, y_train)
lgb_test = lgb.Dataset(X_test, y_test, reference = lgb_train)#设置参数
params = {'boosting_type': 'gbdt','objective': 'multiclass','num_class': 3,'metric': 'multi_logloss'
}#训练模型
model = lgb.train(params, lgb_train, num_boost_round = 100)#预测
y_pred = model.predict(X_test)
y_pred = np.argmax(y_pred, axis = 1)#计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

五、GBDT的原理与特点

(一)定义与基本原理

GBDT(Gradient Boosting Decision Tree)是一种基于Boosting集成学习思想的机器学习算法,用于解决回归和分类问题。它通过将多个弱学习器(通常是决策树)组合成一个强学习器来提高模型的预测能力。其基本思想是迭代地训练一系列决策树,每棵树都在前面树的残差基础上进行学习。以回归问题为例,假设我们有训练数据集 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) (x_1, y_1), (x_2, y_2), \cdots, (x_n, y_n) (x1,y1),(x2,y2),,(xn,yn),首先初始化一个预测值 y ^ i = 0 \hat{y}_i = 0 y^i=0 i = 1 , 2 , ⋯ , n i = 1, 2, \cdots, n i=1,2,,n),然后计算第一个决策树的预测值 h 1 ( x i ) h_1(x_i) h1(xi),此时预测值更新为 y ^ i 1 = y ^ i + h 1 ( x i \hat{y}_i^1 = \hat{y}_i + h_1(x_i y^i1=y^i+h1(xi,但这个预测值与真实值 y i y_i yi之间会存在残差 r i 1 = y i − y ^ i 1 r_{i}^{1} = y_i - \hat{y}_{i}^{1} ri1=yiy^i1。接着,下一棵决策树 h 2 ( x ) h_2(x) h2(x)就会以这个残差为目标进行学习,即试图去拟合这个残差,预测值更新为 y ^ i 2 = y ^ i 1 + h 2 ( x i ) \hat{y}_i^2 = \hat{y}_i^1 + h_2(x_i) y^i2=y^i1+h2(xi)。如此反复,经过 M M M轮迭代后,最终的预测模型为 y ^ i = ∑ m = 1 M h m ( x i ) \hat{y}_i = \sum_{m = 1}^{M}h_m(x_i) y^i=m=1Mhm(xi)

(二)决策树作为弱学习器的优势

决策树具有良好的解释性,其结构可以直观地展示特征的重要性以及特征之间的相互关系。例如,在一个预测房价的模型中,决策树可以清晰地显示出房屋面积、房龄等特征是如何影响房价的,如“如果房屋面积大于100平方米且房龄小于5年,房价处于较高区间”。决策树可以处理数值型和类别型数据,无需对类别型数据进行额外的复杂转换。比如在一个包含用户性别(男/女)、年龄、收入等特征的数据集用于预测用户购买行为时,决策树可以直接使用这些数据进行训练。决策树对数据分布没有严格要求,能够适应各种复杂的数据分布情况。

(三)GBDT的损失函数与优化

在GBDT中,常用的损失函数有平方损失函数(用于回归问题)、对数损失函数(用于分类问题)等。以平方损失函数为例,在回归问题中,损失函数 L ( y , y ^ ) = ( y − y ^ ) 2 L(y, \hat{y}) = (y - \hat{y})^2 L(y,y^)=(yy^)2,其中 y y y是真实值, y ^ \hat{y} y^是预测值。在每一轮迭代中,目标是最小化这个损失函数,通过计算损失函数关于预测值的负梯度,来确定下一棵决策树的训练目标。为防止过拟合,GBDT会采用一些正则化手段,如控制决策树的深度、叶子节点数量或者采用子采样(sub - sampling)的方法。子采样是指在每一轮训练决策树时,只使用一部分训练数据,类似于随机森林中的做法,这样可以增加模型的多样性,减少过拟合的风险。

六、GBDT与LightGBM的关系

(一)继承关系

LightGBM是基于GBDT框架的一种高效实现。GBDT提供了梯度提升决策树的基本思想,即通过迭代地训练决策树来拟合前一轮模型的残差,从而不断提升模型的性能。LightGBM继承了这种梯度提升的理念,在其基础上进行了诸多优化和改进。

(二)性能优化方面的关系

  1. 数据划分策略差异
    • GBDT:传统的GBDT在构建决策树时,如在计算最佳分裂点时,需要对数据进行排序等操作,计算成本较高。例如,在一个包含大量特征和样本的数据集中,为每个特征寻找最佳分裂点可能需要遍历大量的数据点。
    • LightGBM:LightGBM采用了直方图算法来进行数据划分。它将连续的特征值离散化到固定数量的区间(bins)中,然后基于这些直方图来计算分裂增益。例如,对于一个取值范围为[0, 100]的特征,它可能将其划分为10个区间,如[0, 10)、[10, 20)等,这样在计算分裂增益时,只需要在这些离散的区间上进行操作,大大减少了计算量,提高了数据划分的效率。
  2. 生长策略不同
    • GBDT:一些传统的GBDT实现采用层序(level - wise)的生长策略来构建决策树,即同时分裂同一层的所有节点。这种方式比较规整,但可能会导致一些不必要的计算,因为有些节点的分裂可能对模型性能提升帮助不大。
    • LightGBM:LightGBM采用了叶节点优先(leaf - wise)的生长策略。它每次从当前叶子节点中找到分裂增益最大的节点进行分裂,这种策略可以更快地降低损失函数,使得模型能够更快地收敛。不过,这种方式如果不加以限制可能会导致过拟合,所以LightGBM通常会设置最大深度限制等参数来控制模型的复杂度。
  3. 对类别特征的处理
    • GBDT:传统GBDT在处理类别特征时,通常需要先进行独热编码(One - Hot Encoding)等预处理操作,将类别特征转换为数值特征。这不仅增加了数据的维度,还可能会引入稀疏性问题,并且在计算过程中会增加内存消耗和计算时间。
    • LightGBM:LightGBm可以直接处理类别特征,它通过一种特殊的编码方式将类别特征转化为数值特征。例如,它可以根据类别特征在数据中的出现频率等因素进行编码,有效地利用了类别特征中的信息,同时减少了内存消耗和计算时间。

(三)应用场景中的关系

在大数据场景下,传统GBDT在数据量较小、特征维度不是特别高的情况下能够有效工作,但当面对大数据集时,可能会遇到性能瓶颈,如训练时间过长、内存占用过大等问题。而LightGBM在大数据场景下表现出色,其高效数据划分算法、优化的生长策略以及对类别特征的有效处理,使得它能够在大规模数据上快速训练出高精度的模型。在一些对模型精度要求不是极高且数据规模适中的场景下,传统GBDT可以在保证一定精度的同时以相对稳定的速度完成训练。而LightGBM在追求高精度的同时,通过其高效的算法能够实现快速训练,在数据竞赛、工业界的高精度预测场景(如电力负荷预测、金融风险评估等)中更受青睐。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词