图解机器学习算法(11) | LightGBM模型详解(机器学习通关指南·完结)

本文介绍了LightGBM,微软开发的高效GBDT模型,强调其在大数据场景下的优势,如训练速度提升、低内存消耗和准确性增强。文章详细讲解了LightGBM的优化点,如直方图算法、决策树生长策略和并行支持,以及其在类别特征处理和通信优化上的改进。

ShowMeAI研究中心


引言

之前ShowMeAI对强大的boosting模型工具XGBoost做了介绍(详见ShowMeAI文章图解机器学习 | XGBoost模型详解)。本篇我们来学习一下GBDT模型(详见ShowMeAI文章 图解机器学习 | GBDT模型详解)的另一个进化版本:LightGBM。

LightGBM是微软开发的boosting集成模型,和XGBoost一样是对GBDT的优化和高效实现,原理有一些相似之处,但它很多方面比XGBoost有着更为优秀的表现。官方给出的这个工具库模型的优势如下:

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

下图是一组实验数据,在这份实验中,LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6,准确率也略有提升。

1.LightGBM动机

互联网领域的算法应用,通常背后都有海量的大数据。深度学习中一系列神经网络算法,都是以mini-batch的方式喂数据迭代训练的,总训练数据量不受内存限制。

但我们用到的机器学习算法,比如GBDT(参考ShowMeAI文章 GBDT详解)在每一次迭代的时候,都需要遍历整个训练数据多次。

  • 如果把整个训练数据一次性装进内存,会明显限制训练数据的大小。
  • 如果不装进内存,反复地读写训练数据又会消耗非常大的时间。

面对工业级海量的数据,普通的GBDT算法无法满足需求。LightGBM提出的主要原因之一,就是为了解决上述大数据量级下的GBDT训练问题,以便工业实践中能支撑大数据量并保证效率。

2.XGBoost优缺点

我们之前介绍过强大的XGBoost(详见ShowMeAI文章图解机器学习 | XGBoost模型详解),但XGBoost也依旧存在一些缺点,LightGBM针对其中的一部分进行了调整优化。XGB优缺点归纳如下:

1)精确贪心算法

轮迭代时,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。

G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ − γ ] Gain=\frac{1}{2}\left [ \frac{G_{L}^{2}}{H_{L}+\lambda} + \frac{G_{R}^{2}}{H_{R}+\lambda} - \frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda} - \gamma \right ] Gain=21[HL+λGL2+HR+λG

### LightGBM 模型介绍 LightGBM 是一种基于梯度提升决策树 (GBDT) 的高效机器学习框架,由微软开发并开源。相较于其他 GBDT 实现如 XGBoost,在处理大规模数据集时表现出更高的效率和更好的性能[^2]。 #### 主要特点 - **快速训练**:采用直方图算法加速节点分裂过程;通过 GOSS 和 EFB 技术进一步优化计算资源利用率。 - **低内存消耗**:由于采用了直方图算法来近似最佳分割点的选择方式,使得 LightGBM 能够显著减少所需的存储空间。 - **高精度预测**:支持多种损失函数用于回归、二元分类或多类别分类任务,并且可以通过调整参数获得更加精确的结果。 - **内置交叉验证功能**:方便用户直接调用 API 进行模型评估而不必额外编写代码实现此功能。 - **分布式训练能力**:可以很容易地扩展到集群环境中执行更大规模的数据分析工作。 ### 使用方法 为了安装 Python 版本的 LightGBM 库,可以在命令行输入 `pip install lightgbm` 完成环境配置。下面给出一个简单的例子展示如何构建一个基本的 LightGBM 分类器: ```python import lightgbm as lgb from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载鸢尾花数据集作为示例 data = load_iris() X, y = data.data, data.target # 划分训练集与测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 创建 Dataset 数据结构供 LighGBM 使用 train_data = lgb.Dataset(X_train, label=y_train) test_data = lgb.Dataset(X_test, label=y_test, reference=train_data) # 设置参数 params = { 'objective': 'multiclass', 'num_class': 3, } # 训练模型 bst = lgb.train(params, train_data, valid_sets=[test_data]) # 预测 y_pred = bst.predict(X_test) predictions = [list(x).index(max(x)) for x in y_pred] # 输出准确率 print('Accuracy:', accuracy_score(y_test, predictions)) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ShowMeAI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值