


MATLAB 代码实现了一个基于 LightGBM(轻量级梯度提升机) 的回归模型,并在其基础上添加了 区间预测 功能(即预测值附带置信区间)。以下是对该代码的详细分析:
1. 研究背景
在机器学习回归任务中,通常只输出一个点预测值(point prediction),但在许多实际应用中(如金融、能源、交通预测),决策者不仅关心预测值,还关心预测的不确定性(即预测区间)。因此,研究如何在 LightGBM 模型基础上构造预测区间具有重要意义。本代码基于残差的正态性假设,使用训练集残差的标准差构造 95% 置信区间,实现区间预测。
2. 主要功能
- 使用 LightGBM 进行回归建模
- 训练集和测试集的划分与归一化
- 模型训练与早停(early stopping)
- 特征重要性分析
- 点预测 + 区间预测(95% 置信区间)
- 多种回归评价指标计算(R², MAE, MAPE, MBE, RMSE)
- 区间预测评价指标(PICP, PINAW)
- 多图可视化(特征重要性、损失曲线、预测区间、误差图、拟合图)
3. 算法步骤
-
数据加载与预处理
- 读取 Excel 数据
- 按比例划分训练集/测试集(默认 70% 训练)
- 归一化到 [0,1] 区间
-
LightGBM 数据集构建
- 使用
lgbmDataset创建数据集对象 - 设置标签字段
- 使用
-
模型参数配置
- 使用
containers.Map设置 LightGBM 参数 - 目标函数为回归(
regression),评估指标为 RMSE
- 使用
-
模型训练
- 使用
train函数训练模型 - 支持早停(基于验证集)
- 使用
-
预测与反归一化
- 使用
predictMatrix预测 - 反归一化得到原始尺度预测值
- 使用
-
区间构造
- 计算训练集残差标准差 σ
- 假设残差服从正态分布,构造 95% 置信区间:
y^±1.96×σ \hat{y} \pm 1.96 \times \sigma y^±1.96×σ
-
评价指标计算
- 回归指标:R², MAE, MAPE, MBE, RMSE
- 区间指标:PICP(覆盖率)、PINAW(宽度)
-
结果可视化
- 特征重要性柱状图
- 训练损失曲线
- 带有区间填充的预测结果图
- 相对误差条形图
- 真实值与预测值散点拟合图
4. 技术路线
数据输入 → 数据划分 → 归一化 → 构建 LightGBM 数据集 → 参数设置 → 模型训练(含早停)
→ 特征重要性分析 → 点预测 → 区间构造(基于残差标准差)→ 评价指标计算 → 可视化输出
5. 公式原理
(1) 点预测
LightGBM 是基于梯度提升决策树(GBDT)的集成学习模型,目标是最小化损失函数(如均方误差):
L(y,y^)=1n∑i=1n(yi−y^i)2 L(y, \hat{y}) = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 L(y,y^)=n1i=1∑n(yi−y^i)2
(2) 区间预测
假设训练集残差 ( e_i = y_i - \hat{y}_i ) 服从均值为 0 的正态分布,则预测区间为:
y\^−z⋅σ, y\^+z⋅σ\] \[\\hat{y} - z \\cdot \\sigma,\\ \\hat{y} + z \\cdot \\sigma\] \[y\^−z⋅σ, y\^+z⋅σ
其中:
-z=1.96z = 1.96z=1.96对应 95% 置信水平
- σ\sigmaσ为训练集残差的标准差
(3) 区间评价指标
- PICP(Prediction Interval Coverage Probability) :
PICP=1N∑i=1N1(yi∈[Li,Ui])×100% \text{PICP} = \frac{1}{N} \sum_{i=1}^N \mathbb{1}(y_i \in [L_i, U_i]) \times 100\% PICP=N1i=1∑N1(yi∈[Li,Ui])×100% - PINAW(Prediction Interval Normalized Average Width) :
PINAW=1N⋅R∑i=1N(Ui−Li)×100%,R=max(y)−min(y) \text{PINAW} = \frac{1}{N \cdot R} \sum_{i=1}^N (U_i - L_i) \times 100\%, \quad R = \max(y) - \min(y) PINAW=N⋅R1i=1∑N(Ui−Li)×100%,R=max(y)−min(y)
6. 参数设定
| 参数 | 值 | 说明 |
|---|---|---|
num_leaves |
4 | 每棵树的叶子节点数 |
learning_rate |
0.95 | 学习率(偏大) |
boosting_type |
'gbdt' | 梯度提升决策树 |
feature_fraction |
0.9 | 每轮迭代使用的特征比例 |
bagging_fraction |
0.8 | 每轮迭代使用的样本比例 |
bagging_freq |
7 | 每 7 轮执行一次 bagging |
objective |
'regression' | 回归任务 |
metric |
'rmse' | 评估指标为 RMSE |
num_boost_round |
20 | 最大迭代次数 |
early_stopping_rounds |
5 | 早停轮数 |
7. 运行环境
- 操作系统 :Windows(因为加载了
.dll文件) - 软件:MATLAB(需支持调用 C 库)
- 依赖 :
- LightGBM 的动态链接库
lib_lightgbm.dll - 对应的 C 头文件
c_api.h - MATLAB 的
loadlibrary支持
- LightGBM 的动态链接库
8. 应用场景
该代码适用于需要进行 回归预测并量化不确定性 的场景,例如:
- 电力负荷预测
- 股票价格区间预测
- 交通流量预测
- 环境监测数据预测
- 工业设备寿命预测