时序预测 | Matlab代码实现VMD-TCN-GRU-MATT变分模态分解时间卷积门控循环单元多头注意力多变量时序预测
预测效果
代码功能
代码主要功能
该代码实现了一个变分模态分解时间卷积门控循环单元多头注意力多变量时间序列预测模型,核心功能为:
- 使用VMD(变分模态分解)将原始信号分解为多个IMF分量
- 对每个IMF分量构建TCN-GRU-MATT混合神经网络模型进行预测
- 集成所有分量的预测结果得到最终预测值
- 评估预测性能并可视化结果
算法步骤 - 数据预处理:
• 加载原始数据(data.xlsx)和VMD分解结果(vmd_data.mat)
• 将原始数据与每个IMF分量组合成新数据集 - 数据集重构:
• 采用滑动窗口构造时序样本(延时步长kim=6)
• 划分70%训练集和30%测试集
• 数据归一化处理([0,1]区间) - 混合神经网络构建:
输入层
TCN块
展平层
GRU层
多头注意力层
全连接层
回归输出层
• TCN块:2个残差块(膨胀因子1/2),每块包含:
• 因果卷积层(64个5-size滤波器)
• 层归一化 + Dropout(0.005)
• GRU层:35个隐藏单元
• 注意力层:2头自注意力机制
4. 模型训练与预测:
• 使用Adam优化器训练150轮
• 学习率分段下降(初始0.01,100轮后降为0.00001)
• 分别预测各IMF分量结果
• 加权求和得到最终预测值
5. 结果评估:
• 计算MAE/RMSE/MAPE等误差指标
• 绘制预测对比曲线和误差分布图
• 可视化特征图(前4个训练样本)
完整代码
- 完整代码私信博主回复Matlab代码实现VMD-TCN-GRU-MATT变分模态分解时间卷积门控循环单元多头注意力多变量时序预测
clc;
clear
close all
X = xlsread('data.xlsx');
load vmd_data.mat
IMF = u;
disp('…………………………………………………………………………………………………………………………')
disp('VMD-TCN-GRU-MATT预测')
disp('…………………………………………………………………………………………………………………………')
%% 对每个分量建模
for uu=1:size(IMF,2)X_imf=[X(:,1:end-1),IMF(:,uu)];
num_samples = length(X_imf); % 样本个数
kim = 6; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测
or_dim = size(X_imf,2);
% 重构数据集
for i = 1: num_samples - kim - zim + 1res(i, :) = [reshape(X_imf(i: i + kim - 1,:), 1, kim*or_dim), X_imf(i + kim + zim - 1,:)];
end
% 训练集和测试集划分
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);