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

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 : MLp_train{i, 1} = p_train(:, :, 1, i);
end
for i = 1 : NLp_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

预测结果

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

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

https://mbd.pub/o/bread/ZpeVl5xu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法 刷题系列】求带环链表的入环节点(图文详解)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 方法一:数学公式推导法 方法…

LaTeX 的使用

文章目录 TeX 编辑器文档类型中文编译文档结构preamble 导言区(不能放正文内容)document body 正文区 正文内容目录段落列表无序列表有序列表 图片表格交叉引用段落图片表格 转义符 数学公式数学符号行内公式行间公式有公式计数器无公式计数器 公式包含文…

Python 全栈系列254 异步服务与并发调用

说明 发现对于异步(IO)还是太陌生了,熟悉一下。 内容 今天搞了一整天,感觉有一个long story to tell,但是不知道从何说起,哈哈。 异步(协程)需要保证链路上的所有环节都是异步(协程)的,任何一个环节没这么做都会导致…

YOLOv10涨点改进轻量化双卷积DualConv,完成涨点且计算量和参数量显著下降

本文独家改进:双卷积由组卷积和异构卷积组成,执行3x3 和 1x1 卷积运算Q代替其他卷积核仅执行 1x1 卷积。 DualIConv 显着降低了深度神经网络的计算成本和参数数量,同时在某些情况下令人惊讶地实现了比原始模型略高的精度。 我们使用 DualConv 将轻量级 MobileNetV2 的参数数量…

Linux驱动面试题

1.导出符号表的原理? 2.字符设备驱动的框架流程 open read wirte close 是系统调用(从用户空间进入内核空间的唯一的方法)会产生swi软中断《也会存在软中断号》(从User模式切换到SVC(管理模式)下因为在…

你还不会选ProfiNET和EtherCAT网线?

在现代工业自动化领域,ProfiNET和EtherCAT是两种非常流行的通信协议。选择合适的网线对于确保通信的稳定性和效率至关重要。 ProfiNET是什么? ProfiNET是一种基于以太网的通信协议,由德国西门子公司开发。它支持实时通信,广泛应用…

商超智能守护:AI监控技术在零售安全中的应用

结合思通数科大模型的图像处理、图像识别、目标检测和知识图谱技术,以下是详细的商超合规监测应用场景描述: 1. 员工仪容仪表监测: 利用图像识别技术,系统可以自动检测员工是否按照规范整理妆容、穿着工作服,以及是否…

大学课设项目,Windows端基于UDP的网络聊天程序的服务端和客户端

文章目录 前言项目需求介绍一、服务端1.对Udp套接字进行一个封装2. UdpServer的编写3. Task.h4.protocol.h的编写5.线程池的编写6.main.cc 二、客户端1. Socket.h2.protocol.h3.UdpClient4.menu.h5.main.cpp 三、运行图 前言 本次项目可以作为之前内容的一个扩展,学…

003 gitee怎样将默认的私有仓库变成公开仓库

先点击“管理”, 再点击“基本信息” 在“是否开源”里, 选择:开源

python文件操作、文件操作、读写文件、写模式

with读取文件数据内容 with open(filepath,mode,encoding) as file:#具体操作,例如:print(file.read())#查看文件所有的内容。 with:Python中的一个上下文管理器,用于简化资源的管理和释放。它可以用于任意需要进行资源分配和释放的情境…

使用 Azure AI Document Intelligence 创建智能文档处理

简介 借助 Azure AI 文档智能中的预生成模型,无需自行训练模型,即可从常见表单和文档中提取数据。 公司中,表单种类繁多,如发票、收据、调查表等。你可能想知道,从这些文档中提取姓名、地址、金额等信息需要多少工作…

APaaS:智能制造助手

资金不足、IT基础架构薄弱...... 车间业务需求不断地在增加...... 都在说数字化,都在说转型...... 随着企业竞争的日益激烈和市场环境的快速变化,企业需要一个灵活、高效、快速响应市场变化的新平台。在这样的背景下,APaaS应运而生&#x…

RocketMQ快速入门:集成java客户端实现各类消息发送|异步、同步、顺序、单向、延迟、事务(五)附带源码

0. 引言 前面的章节中,我们已经针对rocketmq的基本概念和消息发送、消费流程进行了讲解,但实际在开发中如何实现rocketmq的接入、实现消息发送、消费还没有落实,那么今天,我们继续来学习如何基于java client集成rocketMQ 1. 集成…

火车头采集中英文翻译教程

火车头采集怎么实现数据中文翻译成英文,或英文翻译成中文? 火车头采集没有自带的翻译功能,但可以使用插件功能来实现:导入翻译插件(例如谷歌翻译插件,百度翻译插件等),然后在火车头…

视频媒介VS文字媒介

看到一篇蛮有思考意义的文章就摘录下来了,也引起了反思 目录 一、视频的定义 二、”视频媒介“与”文字媒介”作对比 1.形象 VS 抽象 2.被动 VS 主动 三、视频的缺点-【更少】的思考 1.看视频为啥会导致【更少的思考】 2.内容的【浅薄化】 3.内容的【娱乐化…

【尚庭公寓SpringBoot + Vue 项目实战】用户管理(十五)

【尚庭公寓SpringBoot Vue 项目实战】用户管理(十五) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】用户管理(十五)1、业务介绍2、接口实现2.1、根据条件分页查询用户列表2.2、根据ID更新用户状态 1、业务介绍 用户管理共包含两…

关于生成式人工智能的发展

近年来,人工智能的发展引起了广泛关注,尤其是在深度学习领域,以深度神经网络为代表的人工智能技术已经取得了重大突破。然而,深度神经网络也有其局限性。深度学习技术在处理一些复杂问题时表现良好,但在解决更广泛的任…

PS系统教学20

油漆桶工具 作用:上色工具的一种 上一些纯色、图案 纯色 新建图层填充区域的源设置为前景色设置前景色为想要的颜色左键单机填充(altdelete)如果要添加背景色(Ctrldelete)也可以与选区工具结合使用 可以与快速选择…

【React】如何使用npm run start命令运行两个服务

我们开发前端项目时,有时候需要本地 mock 数据,这样就需要启动两个服务,一个是接口服务,一个是前端项目。可以安装一个插件来帮助我们通过一个命令启动两个服务。 方法一 添加& npm run server 注意:Windows系统…

牛客热题:最长回文子串

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:最长回文子串题目链接方法一&am…