首页 > 其他分享 >长短期记忆神经网络(LSTM)的回归预测(免费完整源代码)【MATLAB】

长短期记忆神经网络(LSTM)的回归预测(免费完整源代码)【MATLAB】

时间:2024-06-17 20:28:39浏览次数:19  
标签:... %% train MATLAB test LSTM 源代码 sim

LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊类型的递归神经网络(RNN),专门用于处理和预测基于时间序列的数据。与传统RNN相比,LSTM在处理长期依赖问题时具有显著优势。

LSTM的基本结构

LSTM由一个称为“细胞状态”(cell state)的核心组件和三个门(gate)组成。这些门控制着信息的流入、流出和保留,从而应对长时间依赖问题。这三个门分别是:
输入门(Input Gate):决定有多少新信息将被存储在细胞状态中。
遗忘门(Forget Gate):决定细胞状态中的哪些信息将被丢弃。
输出门(Output Gate):决定从细胞状态中输出多少信息。
在这里插入图片描述

LSTM的应用

LSTM因其在处理序列数据上的强大能力,被广泛应用于各种领域,如:
自然语言处理(NLP)
语音识别
时间序列预测
图像描述生成
LSTM通过巧妙设计的门机制,有效地解决了传统RNN在长时间序列数据上容易产生梯度消失或梯度爆炸的问题,从而在许多实际应用中表现出色。

LSTM的MATLAB实现

%%  清空环境变量
clc;
clear;
close all;
warning off;
tic
%%  导入数据
load testdata.mat;
%%  数据分析
[trainInd,valInd,testInd] = dividerand(size(X,2),0.7,0,0.3);	%划分训练集与测试集
P_train = X(:,trainInd);	%列索引
T_train = Y(:,trainInd);
P_test = X(:,testInd);
T_test = Y(:,testInd);
M = size(P_train, 2);
N = size(P_test, 2);
L = size(P_train, 1);

lstmnumber = 50;
%%  数据归一化
[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, L, 1, 1, M));
p_test  =  double(reshape(p_test , L, 1, 1, N));
t_train =  double(t_train)';
t_test  =  double(t_test )';

%%  数据格式转换
for i = 1 : M
    Lp_train{i, 1} = p_train(:, :, 1, i);
end
for i = 1 : N
    Lp_test{i, 1}  = p_test( :, :, 1, i);
end

%%  建立模型
layers = [
    sequenceInputLayer([L, 1, 1], "Name", "sequence")                 % 建立输入层,输入数据结构为[f_, 1, 1]
    flattenLayer("Name", "flatten")                                    % 网络铺平层
    lstmLayer(lstmnumber,'Name','lstm1',"OutputMode", "last")                    % lstm层
    fullyConnectedLayer(1, "Name", "fc")                               % 全连接层
    regressionLayer
    ];                      % 回归层

%%  参数设置
options = trainingOptions('adam', ...      % Adam 梯度下降算法
    'MaxEpochs', 200, ...                 % 最大迭代次数
    'GradientThreshold',1,...
    'InitialLearnRate', 1e-3, ...          % 初始学习率为0.01
    "L2Regularization",1e-4,...
    'LearnRateSchedule', 'piecewise', ...  % 学习率下降
    'LearnRateDropFactor', 0.1, ...        % 学习率下降因子 0.5
    'LearnRateDropPeriod', 190, ...        % 经过190次训练后 学习率为 0.01 * 0.1
    'Shuffle', 'every-epoch', ...          % 每次训练打乱数据集
    "Plots","training-progress",...
    'Verbose',false);

%%  训练模型
net = trainNetwork(Lp_train, t_train, layers, options);
analyzeNetwork(layers)
%%  模型预测
t_sim = net.predict(Lp_test);
T_sim = mapminmax('reverse',t_sim,ps_output);
T_sim = double(T_sim);

%%  评价指标
% 误差 error
error = T_test - T_sim';
% 平均绝对误差MAE
MAE = mean(abs(T_sim' - T_test));
% 平均绝对百分比误差MAPE
MAPE = mean(abs((T_test - T_sim')./T_test));
% 均方根误差RMSE
RMSE = sqrt(sum((T_test - T_sim').^2)./N);
% 均方误差MSE
MSE = sum((T_test - T_sim' ).^2)./N;
% 决定系数R2
R = 1 - norm(T_test -  T_sim')^2 / norm(T_test -  mean(T_test ))^2;

%%  绘图
figure(1)
plotregression(T_test,T_sim',['回归图']);

figure(2)
ploterrhist(T_test-T_sim',['误差直方图']);

figure(3)
plot(T_test)
hold on
plot(T_sim)
hold on
xlabel('t/s')
ylabel('value')
title('LSTM预测结果')
legend({'预测间隔','实际值','预测值'})

figure(4)
plot(error);
xlabel('t/s')
ylabel('err')
title('LSTM预测误差')

%% 打印出评价指标
disp(['-----------------------误差计算--------------------------'])
disp(['评价结果如下所示:'])
disp(['平均绝对误差MAE为:         ',num2str(MAE)])
disp(['平均绝对百分比误差MAPE为:  ',num2str(MAPE)])
disp(['均方误差MSE为:             ',num2str(MSE)])
disp(['均方根误差RMSE为:          ',num2str(RMSE)])
disp(['决定系数R^2为:             ',num2str(R)])
toc


预测结果

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

完整代码+数据集下载链接(

标签:...,%%,train,MATLAB,test,LSTM,源代码,sim
From: https://blog.csdn.net/m0_47282648/article/details/139753553

相关文章

  • dlib库实现摄像头疲劳检测(附源代码)
     目录1.导入库2.定义添加中文文本的函数3.定义绘制眼框凸包的函数4.定义检测闭眼的函数5.定义检测大笑的函数6.构造检测器7.计算纵横比8.疲劳判定9.可视化输出 本代码将实现通过分析人脸的关键点进行疲劳检测,若持续闭眼则提示危险;考虑到大笑时也会眯眼,在同时检......
  • SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测
    GWO(GreyWolfOptimizer)是一种基于灰狼行为的优化算法,用于优化问题的求解。CNN(ConvolutionalNeuralNetwork)是卷积神经网络,主要用于图像处理和模式识别。LSTM(LongShort-TermMemory)是一种递归神经网络,用于处理和预测时序数据。self-attention(自注意力)是一种机制,用于在序列......
  • 分类预测 | Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测
    分类预测|Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测目录分类预测|Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料分类效果基本描述1.Matlab实现GWO-CNN-SVM灰狼冰算法优化卷积支持向量机......
  • 【跌倒检测】基于隐马尔可夫模型HMM和支持向量机SVM实现形状特征跌倒检测 附Matlab代
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【组播优化】基于蚁群算法求解QOS费用延时组播路由优化问题附Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 基于Matlab的LDPC编解码算法实现的及LDPC码性能测试+源代码+文档说明
    文章目录源码下载地址@[toc]源码下载地址项目介绍项目功能界面预览项目备注源码下载地址项目介绍项目功能界面预览项目备注源码下载地址源码下载地址@[toc]源码下载地址点击这里下载代码项目介绍LDPC码背景及概要LDPC是LowDensityParityCheckCode英文缩写,意......
  • 基于Itô扩散过程的交易策略偏微分方程matlab求解与仿真
    目录1.程序功能描述2.测试软件版本以及运行结果展示3.核心程序4.本算法原理5.完整程序1.程序功能描述    基于Itô扩散过程的交易策略偏微分方程,提出了一种确定Itô扩散过程。通过根据的第一次通过时间来确定问题在这个过程中,我们推导出交易长度的分布函数和......
  • 回归预测 | Matlab实现Transformer多输入单输出回归预测
    回归预测|Matlab实现Transformer多输入单输出回归预测目录回归预测|Matlab实现Transformer多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现Transformer多变量回归预测;2.运行环境为Matlab2023b;3.输入多个特征,输......
  • 【MATLAB】语法
    MATLAB基本语法(%{和%})赋值函数名=值;forfori=1:10循环语句end//whilex=0;sum=0;whilex<100 sum=sum+x; x++;end//ififx>1 f=x^2+1;else f=2*xendswitchonum=input('请输入一个数');switchnumcase-1//注意case后面......
  • 每日总结(matlab)
    实验五:MATLAB最优化工具箱的使用(1)线性规划应用案例的求解1、基本要求通过一个农业生产计划优化安排的实例求解,培养学生解决实际线性规划问题的初步能力;熟悉线性规划的建模过程;掌握Matlab优化工具箱中线性规划函数的调用。2、主要内容某村计划在100公顷的土地上种植a、b、c三......