LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)

发布于:2025-06-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)

效果一览

在这里插入图片描述
在这里插入图片描述

基本介绍

普通的多变量时序已经用腻了,审稿人也看烦了,本期推出一期高创新模型,基于LSTM提取时序特征后输入XGBoost之中预测,模型支撑风电预测、电池预测、光伏预测、交通预测、股票预测等领域,先用先发,不要犹豫!

1.Matlab实现LSTM-XGBoost多变量时间序列预测,长短期记忆神经网络结合极限梯度提升树多变量时间序列预测;

2.运行环境为Matlab2023b及以上;

3.data为数据集,输入多个特征,输出单个变量,考虑历史特征的影响,多变量时间序列预测,main.m为主程序,运行即可,所有文件放在一个文件夹;

4.命令窗口输出R2、MSE、RMSE、MAE、MAPE、MBE等多指标评价。

代码中文注释清晰,质量极高,赠送测试数据集,可以直接运行源程序。替换你的数据即可用 适合新手小白
主要功能
该代码实现了一个 LSTM-XGBoost 混合模型,用于时间序列预测,主要流程包括:

数据预处理:构建时序样本,划分训练集/测试集,归一化数据

特征提取:用LSTM网络从原始时序数据中提取特征

回归预测:将LSTM提取的特征输入XGBoost模型进行回归预测

性能评估:计算RMSE、R²、MAE、MAPE等7种评估指标

结果可视化:绘制预测对比图、误差分布图和拟合效果图

关键参数设定

  1. 时序参数
    用连续4个时间步的历史数据作为输入预测1个时间步的目标值

  2. 数据划分
    num_size = 0.7:70%数据训练,30%数据测试

  3. LSTM模型
    训练参数:Adam优化器,100轮迭代,32批大小,0.01学习率

  4. XGBoost模型
    num_trees =100;% 100棵树params.eta =0.1;% 学习率0.1params.max_depth =5;% 树最大深度5
    算法步骤
    数据重构

滑动窗口构造样本:[t-3, t-2, t-1, t] → 预测 t+1

LSTM特征提取

p_train =activations(net0,vp_train,‘fc’);% 提取全连接层特征
XGBoost预测

model =xgboost_train(p_train, t_train, params, num_trees);t_sim =xgboost_test(p_test, model);
评估指标计算

RMSE、R²、MAE、MAPE、MBE、MSE 七项指标

可视化

预测值 vs 真实值曲线

相对误差条形图

拟合散点图(含线性趋势线)

运行环境要求
MATLAB版本,必须使用 2023b 及以上版本

在这里插入图片描述

程序设计

完整代码获取私信回复:LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)


%%  清空环境变量
warning off             % 关闭报警信息
close all               % 关闭开启的图窗
clear                   % 清空变量
clc                     % 清空命令行

%%  导入数据

num_samples = length(result);  % 样本个数
or_dim = size(result, 2);      % 原始特征+输出数目


%%  数据集分析
outdim = 1;                                  % 最后一列为输出
num_size = 0.7;                              % 训练集占数据集比例
num_train_s = round(num_size * num_samples); % 训练集样本个数
f_ = size(res, 2) - outdim;                  % 输入特征维度

%%  划分训练集和测试集
P_train = res(1: num_train_s, 1: f_)';
T_train = res(1: num_train_s, f_ + 1: end)';
M = size(P_train, 2);

P_test = res(num_train_s + 1: end, 1: f_)';
T_test = res(num_train_s + 1: end, f_ + 1: end)';
N = size(P_test, 2);

%%  数据归一化
[P_train, ps_input] = mapminmax(P_train, 0, 1);
P_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

%%  数据平铺
%   将数据平铺成1维数据只是一种处理方式
%   也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
%   但是应该始终和输入层数据结构保持一致
P_train =  double(reshape(P_train, f_, 1, 1, M));
P_test  =  double(reshape(P_test , f_, 1, 1, N));

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718


网站公告

今日签到

点亮在社区的每一天
去签到