【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN
【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN
目录
- 【五模型时间序列预测对比】Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN
- 预测效果
- 基本介绍
- 程序设计
- 参考资料
预测效果
基本介绍
Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型单变量时间序列预测对比 (Matlab2023b)
1.程序已经调试好,替换数据集后,仅运行一个main即可运行,数据格式为excel!!!
2.Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型单变量时间序列预测对比 (Matlab2023b 单变量时间序列预测)。
3.运行环境要求MATLAB版本为2023b及其以上。
4.评价指标包括:R2、MAE、MSE、RPD、RMSE、MAPE等,图很多,符合您的需要代码中文注释清晰,质量极高。
代码功能
这段MATLAB代码实现了一个多模型时间序列预测对比系统,核心功能包括:
使用5种深度学习模型(CNN、LSTM、CNN-LSTM、Transformer、Transformer-LSTM)进行时间序列预测
完整的预测流程:数据预处理→模型构建→训练→预测→结果可视化
全面的模型性能评估与对比分析
算法步骤
数据预处理:
从Excel导入单列时间序列数据
构建滑动窗口数据集(历史步长kim=7,预测下一个时间点)
70/30比例划分训练/测试集
数据归一化(0-1范围)
模型构建与训练:
CNN:2层卷积(16/32滤波器) + 全连接层
LSTM:单层LSTM(20单元) + 全连接
CNN-LSTM:卷积层特征提取 → LSTM时序建模
Transformer:位置编码 + 2层自注意力 + 全连接
Transformer-LSTM:Transformer特征提取 → LSTM时序建模
预测与评估:
各模型分别进行训练/测试集预测
计算5种评价指标:RMSE、MAE、MAPE、R²、MSE
反归一化恢复原始数据尺度
可视化分析:
损失函数曲线(训练过程监控)
预测结果对比曲线(5模型并行展示)
误差分布直方图
多维指标雷达图
罗盘图/柱状图/散点图对比
应用场景
金融预测:股票价格、汇率波动预测
能源领域:电力负荷、能源消耗预测
气象预测:温度、降水量时序预测
工业预测:设备故障预警、生产指标预测
算法研究:深度学习时序模型对比基准
创新亮点
多模型集成对比:一站式比较5类主流时序模型
三维可视化:雷达图/罗盘图实现多维指标直观对比
复合架构:CNN-LSTM/Transformer-LSTM等混合模型
参数配置:经调优的L2正则化/学习率衰减策略
全面评估体系:5大误差指标+7种可视化分析
程序设计
- 完整代码私信回复五模型时间序列预测对比,Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN。
%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行%% 导入数据(时间序列的单列数据)
result = xlsread('data.xlsx');%% 数据分析
num_samples = length(result); % 样本个数
kim = 7; % 延时步长(kim个历史数据作为自变量)
zim = 1; % 跨zim个时间点进行预测%% 划分数据集
for i = 1: num_samples - kim - zim + 1res(i, :) = [reshape(result(i: i + kim - 1), 1, kim), result(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);%% 数据平铺
% 将数据平铺成1维数据只是一种处理方式
% 也可以平铺成2维数据,以及3维数据,需要修改对应模型结构
% 但是应该始终和输入层数据结构保持一致
p_train = double(reshape(p_train, f_, 1, 1, M));
p_test = double(reshape(p_test , f_, 1, 1, N));
t_train = double(t_train)';
t_test = double(t_test )';
参考资料
[1] https://blog.csdn.net/kjm13182345320/article/details/128577926?spm=1001.2014.3001.5501
[2] https://blog.csdn.net/kjm13182345320/article/details/128573597?spm=1001.2014.3001.5501