【MATLAB第2期】源码分享#基于LSTM时间序列单步预测,含验证和预测未来

简介: 【MATLAB第2期】源码分享#基于LSTM时间序列单步预测,含验证和预测未来

【MATLAB第2期】源码分享#基于LSTM时间序列单步预测,含验证和预测未来


1.运行环境


matlab2020a + cpu


2.数据说明


单列数据,2018/10~2018/12 共三个月,92个数据。


3.数据处理


样本标准化处理,其中,前85个数据作为训练样本,来验证后7个数据效果。最后预测未来7个数据。

numTimeStepsTrain = floor(85);%85数据训练 ,7个用来验证

dataTrain = data(1:numTimeStepsTrain+1,:);% 训练样本

dataTest = data(numTimeStepsTrain:end,:); %验证样本


4.LSTM参数设置

numHiddenUnits = 500;%隐含层神经元节点数

dropoutLayer(0.2)%丢弃层概率


5.运行过程

根据训练效果RMSE误差图以及损失图,可在运行时降低训练次数,如设置为300,加快收敛。


6.运行结果


训练结果:


验证结果:


评价指标:

训练集数据的MAE为:2524.5837

验证集数据的MAE为:3277.468

训练集数据的MAPE为:0.3253

验证集数据的MAPE为:0.31752

训练集数据的RMSE为:3380.5039

验证集数据的RMSE为:3862.0957

原数据量级比较大,加上参数还需要打磨,所以误差显得比较大 。可以套用自己数据试试。



7.预测未来



8.代码展示:


%% 1.环境清理
clear, clc, close all;
%% 2.导入数据
data=xlsread('data.csv');
data1=data;
% 原始数据绘图
figure
plot(data,'-s','Color',[0 0 255]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[0 0 255]./255)
legend('原始数据','Location','NorthWest','FontName','华文宋体');
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');
%% 3.数据处理
numTimeStepsTrain = floor(85);%85数据训练 ,7个用来验证
[XTrain,YTrain,XTest,YTest,mu,sig] = shujuchuli(data,numTimeStepsTrain);
%% 4.定义LSTM结构参数
numFeatures= 1;%输入节点
numResponses = 1;%输出节点
numHiddenUnits = 500;%隐含层神经元节点数 
%构建 LSTM网络 
layers = [sequenceInputLayer(numFeatures) 
 lstmLayer(numHiddenUnits) %lstm函数 
dropoutLayer(0.2)%丢弃层概率 
 reluLayer('name','relu')% 激励函数 RELU 
fullyConnectedLayer(numResponses)
regressionLayer];
XTrain=XTrain';
YTrain=YTrain';
%% 5.定义LSTM函数参数 
def_options();
%% 6.训练LSTM网络 
net = trainNetwork(XTrain,YTrain,layers,options);
%% 7.建立训练模型 
net = predictAndUpdateState(net,XTrain);
%% 8.仿真预测(训练集) 
M = numel(XTrain);
for i = 1:M
    [net,YPred_1(:,i)] = predictAndUpdateState(net,XTrain(:,i),'ExecutionEnvironment','cpu');%
end
T_sim1 = sig*YPred_1 + mu;%预测结果去标准化 ,恢复原来的数量级 
%% 9.仿真预测(验证集) 
N = numel(XTest);
for i = 1:N
    [net,YPred_2(:,i)] = predictAndUpdateState(net,XTest(:,i),'ExecutionEnvironment','cpu');%
end
T_sim2 = sig*YPred_2 + mu;%预测结果去标准化 ,恢复原来的数量级 
%% 10.评价指标
%  均方根误差
T_train=data1(1:M)';
T_test=data1(M+1:end)';
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);
%  MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M ;
mae2 = sum(abs(T_sim2 - T_test )) ./ N ;
disp(['训练集数据的MAE为:', num2str(mae1)])
disp(['验证集数据的MAE为:', num2str(mae2)])
%  MAPE
maep1 = sum(abs(T_sim1 - T_train)./T_train) ./ M ;
maep2 = sum(abs(T_sim2 - T_test )./T_test) ./ N ;
disp(['训练集数据的MAPE为:', num2str(maep1)])
disp(['验证集数据的MAPE为:', num2str(maep2)])
%  RMSE
RMSE1 = sqrt(sumsqr(T_sim1 - T_train)/M);
RMSE2 = sqrt(sumsqr(T_sim2 - T_test)/N);
disp(['训练集数据的RMSE为:', num2str(RMSE1)])
disp(['验证集数据的RMSE为:', num2str(RMSE2)])
%% 11. 绘图
figure
subplot(2,1,1)
plot(T_sim1,'-s','Color',[255 0 0]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[250 0 0]./255)
hold on 
plot(T_train,'-o','Color',[150 150 150]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[150 150 150]./255)
legend( 'LSTM拟合训练数据','实际分析数据','Location','NorthWest','FontName','华文宋体');
title('LSTM模型预测结果及真实值','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');
xlim([1 M])
%-------------------------------------------------------------------------------------
subplot(2,1,2)
bar((T_sim1 - T_train)./T_train)   
legend('LSTM模型训练集相对误差','Location','NorthEast','FontName','华文宋体')
title('LSTM模型训练集相对误差','fontsize',12,'FontName','华文宋体')
ylabel('误差','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体')
xlim([1 M]);
%-------------------------------------------------------------------------------------
figure
subplot(2,1,1)
plot(T_sim2,'-s','Color',[0 0 255]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[0 0 255]./255)
hold on 
plot(T_test,'-o','Color',[0 0 0]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[0 0 0]./255)
legend('LSTM预测测试数据','实际分析数据','Location','NorthWest','FontName','华文宋体');
title('LSTM模型预测结果及真实值','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');
xlim([1 N])
%-------------------------------------------------------------------------------------
subplot(2,1,2)
bar((T_sim2 - T_test )./T_test)   
legend('LSTM模型测试集相对误差','Location','NorthEast','FontName','华文宋体')
title('LSTM模型测试集相对误差','fontsize',12,'FontName','华文宋体')
ylabel('误差','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体')
xlim([1 N]);
%% 12.预测未来
P = 7;% 预测未来数量
YPred_3 = [];%预测结果清零 
[T_sim3] = yuceweilai(net,XTrain,data,P,YPred_3,sig,mu)
%%  13.绘图
figure
plot(1:size(data,1),data,'-s','Color',[255 0 0]./255,'linewidth',1,'Markersize',5,'MarkerFaceColor',[250 0 0]./255)
hold on 
plot(size(data,1)+1:size(data,1)+P,T_sim3,'-o','Color',[150 150 150]./255,'linewidth',0.8,'Markersize',4,'MarkerFaceColor',[150 150 150]./255)
legend( 'LSTM预测结果','Location','NorthWest','FontName','华文宋体');
title('LSTM模型预测结果','fontsize',12,'FontName','华文宋体')
xlabel('样本','fontsize',12,'FontName','华文宋体');
ylabel('数值','fontsize',12,'FontName','华文宋体');



9.代码获取:

调用函数以及案例数据可后台私信回复第2期”获取下载链接了,免费下载即可。

内容整理不易,求个关注,后续会持续分享机器学习相关的源代码。






相关文章
|
26天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
166 80
|
3月前
|
存储 算法 数据可视化
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
128 2
|
15天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
10天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
20天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
23天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
1月前
|
机器学习/深度学习 算法 Python
基于BP神经网络的金融序列预测matlab仿真
本项目基于BP神经网络实现金融序列预测,使用MATLAB2022A版本进行开发与测试。通过构建多层前馈神经网络模型,利用历史金融数据训练模型,实现对未来金融时间序列如股票价格、汇率等的预测,并展示了预测误差及训练曲线。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。

热门文章

最新文章