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

news2024/11/25 16:27:03

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


预测结果

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

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

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

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

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

相关文章

聊聊DoIP吧(三)-端口号port

DoIP在UDP和TCP建立连接和发送诊断报文的过程中使用的端口定义如下:

springboot宠物领养系统-计算机毕业设计源码07863

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

Linux C语言:字符串处理函数

一、字符串函数 1、C库中实现了很多字符串处理函数 #include <string.h> ① 求字符串长度的函数strlen② 字符串拷贝函数strcpy③ 字符串连接函数strcat④ 字符串比较函数strcmp 2、字符串长度函数strlen 格式&#xff1a;strlen(字符数组)功能&#xff1a;计算字符串…

LLM中表格处理与多模态表格理解

文档处理中不可避免的遇到表格&#xff0c;关于表格的处理问题&#xff0c;整理如下&#xff0c;供各位参考。 问题描述 RAG中&#xff0c;对上传文档完成版式处理后进行切片&#xff0c;切片前如果识别文档元素是表格&#xff0c;那么则需要对表格进行处理。一般而言&#x…

【UML用户指南】-17-对基本行为建模-交互

目录 1、消息的可视化表示 2、对象与角色 3、链和连接件 4、消息 5、序列 6、创建、修改和撤销 7、表示法 8、常用建模技术 8.1、对控制流建模 8.1.1、基于时间的控制流 8.1.2、基于结构的控制流 在任何有意义的系统中&#xff0c;对象都不是孤立存在的&#xff0c;…

SQL优化选对执行计划,查询速度提升1000倍 | OceanBase 应用实践

作者&#xff1a;爱可生数据库高级工程师任仲禹&#xff0c;擅长故障分析和性能优化。 本文通过一个案例&#xff0c;分享使用OceanBase时&#xff0c;SQL走错执行计划&#xff0c;而导致慢SQL的排查方法论。 案例背景 在使用OceanBase 3.2.3 版本的过程中&#xff0c;项目组反…

Spring的SmartLifecycle可以没用过,但没听过就不好了! - 第517篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

HTML基础结构入门

HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础语言。它用于描述网页的结构和内容。让我们从最基本的HTML文档开始。 HTML基础结构 一个基本的HTML文档结构如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta …

PMP证书有何用?

PMP证书有何用&#xff1f; PMP项目管理专业人士资格认证证书对从事或希望从事项目管理工作的人员有重要意义&#xff0c;具体体现在以下几个方面&#xff1a; 1. 提供职业机会&#xff1a; PMP是项目管理领域的国际认可标准&#xff0c;拥有该证书的人在求职时具备了更强的…

python-docx-template 的 Replace docx pictures 占位图片名称从哪来?

python-docx-template 的 Replace docx pictures 占位图片名称从哪来&#xff1f; 在 Word 中看占位图片名称用代码输出输出结果找对应图片 使用 replace_pic参考资料 在 Word 中看占位图片名称 右键图片 》查看可选文字 用代码输出 from docxtpl import DocxTemplate# 初始化…

【proteus仿真】基于51单片机的电压检测系统

【proteus仿真】基于51单片机的电压检测系统 资料下载地址&#xff1a;关注公众号 小邵爱电子 获取 1.前言 使用51单片机和ADC模块设计一个数字电压表&#xff0c;将模拟信号0~5V之间的电压转换为数字量信号&#xff0c;并通过LED实时显示电压数据 、 2.仿真原理图 3.硬件…

python安装目录文件说明----Dlls文件夹

在Python的安装目录下&#xff0c;通常会有一个DLLs文件夹&#xff0c;它是Python标准库的一部分。这个文件夹包含了一些动态链接库&#xff08;Dynamic Link Libraries&#xff0c;DLL&#xff09;&#xff0c;这些库提供了Python解释器和标准库的一些关键功能。以下是对这个文…

Linux(Centos7)OpenSSH漏洞修复,升级最新openssh-9.7p1

OpenSSH更新 一、OpenSSH漏洞二、安装zlib三、安装OpenSSL四、安装OpenSSH 一、OpenSSH漏洞 服务器被扫描出了漏洞需要修复&#xff0c;准备升级为最新openssh服务 1. 使用ssh -v查看本机ssh服务版本号 ssh -V虚拟机为OpenSSH7.4p1&#xff0c;现在准备升级为OpenSSH9.7p1…

Windows 与 Java 环境下的 Redis 利用分析

1 前言 在最近的一次攻防演练中&#xff0c;遇到了两个未授权访问的 Redis 实例。起初以为可以直接利用&#xff0c;但后来发现竟然是Windows Java (Tomcat)。因为网上没有看到相关的利用文章&#xff0c;所以在经过摸索&#xff0c;成功解决之后决定简单写一写。 本文介绍了…

洗地机性价比高的是哪一款?行内人告诉你

在浏览前&#xff0c;希望您轻触屏幕上方的“关注”按钮&#xff0c;让我后续为您带来更多实用且精彩的内容&#xff0c;感谢您的支持&#xff01; 洗地机作为现在的流行清洁工具&#xff0c;它的魅力之处在于&#xff1a;性价比极高&#xff0c;大多数家庭无需花费过多就能把…

java的Filter(过滤器),Interceptor(拦截器) 和 Aspect(切面)

文章目录 前言一、过滤器 (Filter) 基本用法二、拦截器 (Interceptor) 基本用法三、Aspect(切面)的基本用法总结 前言 Filter 是servlet层面的&#xff0c;由Servlet容器(如Tomcat)支持&#xff0c;只能在web程序中使用&#xff0c;实现了javax.servlet.Filter接口 Intercept…

2024北京智源大会

北京智源大会是年度国际性人工智能高端学术交流的盛会&#xff0c;定位于内行的AI盛会。智源大会紧密围绕当前人工智能学术领域迫切需要解决的问题&#xff0c;以及产业落地过程中存在的诸多挑战&#xff0c;开展深入探讨。智源研究院是2018年11月份成立的一家人工智能领域的新…

直播美颜SDK技术指南:实现实时美颜效果的算法方案

本篇文章&#xff0c;小编将探讨直播美颜SDK的技术实现和算法方案。 一、美颜技术概述 美颜技术通过一系列图像处理算法&#xff0c;实时美颜效果可以在视频直播过程中实时呈现&#xff0c;提升用户的直播体验。为了实现这些效果&#xff0c;需要结合图像处理和计算机视觉技术…

“奇点”临近,产业应用与人工智能怎样“共同进化”

以下文章来源&#xff1a;新华日报 眼下&#xff0c;以大模型为核心的人工智能技术呈现颠覆性突破。年初&#xff0c;OpenAI公司发布旗下的文生视频大模型Sora&#xff0c;距去年ChatGPT的横空出世&#xff0c;也仅仅过去一年。 “当前&#xff0c;人工智能迈向通用智能‘奇点’…

Hue Hadoop 图形化用户界面 BYD

软件简介 Hue 是运营和开发 Hadoop 应用的图形化用户界面。Hue 程序被整合到一个类似桌面的环境&#xff0c;以 web 程序的形式发布&#xff0c;对于单独的用户来说不需要额外的安装。