当前位置: 首页 > news >正文

【机器学习第四期(Python)】LightGBM 方法原理详解

LightGBM 概述

  • 一、LightGBM 简介
  • 二、LightGBM 原理详解
    • ⚙️ 核心原理
    • 🧠 LightGBM 的主要特点
  • 三、LightGBM 实现步骤(Python)
    • 🧪 可调参数推荐
    • 完整案例代码(回归任务 + 可视化)
  • 参考

LightGBM 是由微软开源的 基于梯度提升框架(GBDT) 的机器学习算法,专为高性能、高效率设计,适用于大规模数据处理任务。它在准确率、训练速度和资源使用上都优于传统 GBDT 实现(如 XGBoost)。

一、LightGBM 简介

二、LightGBM 原理详解

⚙️ 核心原理

LightGBM 本质上是 Gradient Boosting Decision Tree(GBDT) 的一种高效实现。但它有两个关键创新:

1. 基于直方图的决策树算法(Histogram-based Algorithm)
将连续特征离散成固定数量的桶(bins),减少计算复杂度和内存占用。
计算增益时不再遍历所有可能的切分点,而是只在桶边界上寻找。

2. 叶子优先生长策略(Leaf-wise Tree Growth)
传统 GBDT 使用 Level-wise(按层生长) 方法。

LightGBM 使用 Leaf-wise(按叶节点增益最大优先扩展) 策略:

  • 每次选择增益最大的叶子节点扩展,导致更深的树。
  • 收敛更快,但可能更容易过拟合(需用 max_depth 控制)。

🧠 LightGBM 的主要特点

特性描述
高效率训练速度远快于 XGBoost 和传统 GBDT
内存占用低使用直方图压缩数据
支持类别特征无需独热编码,直接处理类别型特征
可扩展性强支持大数据、分布式训练
数据支持支持稀疏数据、缺失值自动处理

三、LightGBM 实现步骤(Python)

🧪 可调参数推荐

参数名含义说明
num_leaves树的最大叶子数值越大越容易过拟合
max_depth树的最大深度控制模型复杂度
learning_rate学习率越小越稳,但需要更多迭代
feature_fraction特征抽样率防止过拟合
bagging_fraction数据抽样率类似随机森林中的 bootstrap
lambda_l1 / lambda_l2正则项控制模型复杂度

完整案例代码(回归任务 + 可视化)

绘制的效果图如下:
在这里插入图片描述

左图:拟合效果:拟合曲线很好地捕捉了数据的非线性趋势。

  • 蓝点:训练数据
  • 红点:测试数据
  • 绿线:GBDT 拟合曲线

右图:残差图:残差应随机分布在 y=0 附近,没有明显模式,表明模型拟合良好。

输出结果为:

LightGBM Train MSE: 0.0581
LightGBM Test MSE: 0.0570

完整Python实现代码如下:

import numpy as np
import matplotlib.pyplot as plt
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 设置字体
plt.rcParams['font.family'] = 'Times New Roman'# 1. 生成数据
np.random.seed(42)
X = np.linspace(0, 10, 200).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.2, X.shape[0])# 2. 划分训练/测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. 构造 LightGBM 数据集对象
train_dataset = lgb.Dataset(X_train, label=y_train)
test_dataset = lgb.Dataset(X_test, label=y_test, reference=train_dataset)# 4. 设置参数
params = {'objective': 'regression','metric': 'rmse','learning_rate': 0.1,'num_leaves': 15,'max_depth': 3,'verbose': -1,'seed': 42
}# 5. 训练 LightGBM 模型
model = lgb.train(params,train_dataset,num_boost_round=100,valid_sets=[train_dataset, test_dataset],valid_names=['train', 'test'],
)# 6. 预测与评估
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)train_mse = mean_squared_error(y_train, y_train_pred)
test_mse = mean_squared_error(y_test, y_test_pred)print(f"LightGBM Train MSE: {train_mse:.4f}")
print(f"LightGBM Test MSE: {test_mse:.4f}")# 7. 可视化
plt.figure(figsize=(12, 6))# 7.1 拟合曲线图
plt.subplot(1, 2, 1)
plt.scatter(X_train, y_train, color='lightblue', label='Train Data', alpha=0.6)
plt.scatter(X_test, y_test, color='lightcoral', label='Test Data', alpha=0.6)X_all = np.linspace(0, 10, 1000).reshape(-1, 1)
y_all_pred = model.predict(X_all)
plt.plot(X_all, y_all_pred, color='green', label='LightGBM Prediction', linewidth=2)plt.title("LightGBM Model Fit", fontsize=15)
plt.xlabel("X", fontsize=14)
plt.ylabel("y", fontsize=14)
plt.legend()
plt.grid(True)# 7.2 残差图
plt.subplot(1, 2, 2)
train_residuals = y_train - y_train_pred
test_residuals = y_test - y_test_predplt.scatter(y_train_pred, train_residuals, color='blue', alpha=0.6, label='Train Residuals')
plt.scatter(y_test_pred, test_residuals, color='red', alpha=0.6, label='Test Residuals')
plt.axhline(y=0, color='black', linestyle='--')
plt.xlabel("Predicted y", fontsize=14)
plt.ylabel("Residuals", fontsize=14)
plt.title("Residual Plot", fontsize=15)
plt.legend()
plt.grid(True)plt.tight_layout()
plt.show()

参考

http://www.dtcms.com/a/263373.html

相关文章:

  • 跨主机用 Docker Compose 部署 PostgreSQL + PostGIS 主从
  • [特殊字符]【联邦学习实战】用 PyTorch 从 0 搭建一个最简单的联邦学习系统(含完整代码)
  • 编程新手之环境搭建:node python
  • [论文阅读] Neural Architecture Search: Insights from 1000 Papers
  • 创客匠人解析知识变现赛道:从 IP 孵化到商业闭环的核心策略
  • xilinx axi datamover IP使用demo
  • 【STM32HAL-第1讲 基础篇-单片机简介】
  • C#数字格式化全解析:从基础到进阶的实战指南
  • 腾讯云空间,高性能显卡云,安装xinference报错,pip install 空间不够用了
  • leedcode:找到字符串中所有字母异位词
  • 04密码加密
  • 中钧科技参加中亚数字经济对话会,引领新疆企业数字化新征程!
  • 【Teensy】在ArduinoIDE中配置Teensy4.1
  • LoRA 实战指南:NLP 与 CV 场景的高效微调方法全解析
  • 非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上
  • 强化学习概述及学习流程
  • 视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
  • spring-ai 工作流
  • LG 将正式终止手机相关服务,彻底告别手机市场
  • 机器人、灵巧手动捕方案 | 突破底层适配,动捕数据直通仿真平台
  • 【科研绘图系列】R语言绘制世界地图分布(world map)
  • 【数据挖掘】数据挖掘综合案例—银行精准营销
  • 衡石科技chatbot分析手册--钉钉数据问答机器人配置
  • 纯前端本地文件管理器(VSCode风格)(浏览器对本地文件增删改查)
  • 阿里云计算巢私有化MCP市场:企业级AI工具的安全部署新选择
  • hono+postgresql+CURD
  • 华为云Flexus+DeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程
  • FPGA实现CameraLink视频解码转SDI输出,基于LVDS+GTX架构,提供2套工程源码和技术支持
  • 如何让Excel自动帮我们算加减乘除?
  • Python 数据分析与机器学习入门 (一):环境搭建与核心库概览