长短期记忆神经网络(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.rhkb.cn/news/352282.html

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

相关文章

FFmpeg中内存分配和释放相关的源码:av_malloc函数、av_mallocz函数、av_free函数和av_freep函数分析

一、av_malloc函数分析 (一)av_malloc函数的声明 av_malloc函数的声明放在在FFmpeg源码(本文演示用的FFmpeg源码版本为5.0.3,该ffmpeg在CentOS 7.5上通过10.2.1版本的gcc编译)的头文件libavutil/mem.h中:…

Ubuntu网络管理命令:ifconfig

安装Ubuntu桌面系统(虚拟机)_虚拟机安装ubuntu桌面版-CSDN博客 关于ifconfig命令,在11.1节已经介绍过了。通过该命令可以查看和配置网络接口。ifconfig是一个比较古老的命令,在Ubuntu 22以及其他的许多发行版中,已经不…

【前端项目笔记】2 主页布局

主页布局 element-ui提供的组件名称就是它的类名 ☆☆ CSS选择器: (1)基本选择器 类型选择器 p/span/div…… 类选择器 (.classname) ID选择器 (#idname) 通配选择器 ( * ) (2)属性选择器 选择具有特定属性或属性值的…

最新下载:CrossOver 2024【软件附加安装教程】

CrossOver不像Parallels或VMware的模拟器,而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏,而不需虚拟机。它为Windows软件提供所需的资源,以达到在Mac OS X系统上运行Windows程序的目的。 安 装…

【网络安全学习】使用Kali做渗透情报收集-01-<域名信息主机信息>

1.收集开源情报 开源情报(Open Source Intelligence,OSINT)是指从各种公开的渠道中寻找和获取有价值的信息 如:互联网、媒体、社交网络、公共数据库等开源情报具有以下特点: - 丰富性:开源情报涵盖了各种类型和领域的信息 - 可…

linux centos consul1.15.2一键安装部署

consul原理、作用、安装相关内容 一、理论部分二、安装下载版本地址三、安装consul服务 一、理论部分 1、consul的原理 Consul的原理及作用可以归纳为以下几点: ①、基于Gossip协议的通信:Consul使用了基于Gossip协议的Serf实现来进行通信。 Gossip协议…

矩阵乘法的直觉

矩阵乘法是什么意思? 一种常见的观点是矩阵乘法缩放/旋转/倾斜几何平面: NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜…

分数限制下,选好专业还是选好学校?

目录 分数限制下,选好专业还是选好学校? 方向一:专业解析 1. 专业选择的重要性 2. 不同专业的优势与挑战 3. 个人专业选择经验分享 4. 实际场景下的“专业VS学校”选择方案 方向二:名校效应分析 1. 名校声誉与品牌效应 2…

Unity 使用TextMeshPro实现图文混排

最后实现出的效果是这样的 开始实现 准备两张图 选中图片右键->Create->TextMeshPro->Sprite Asset 然后文件夹内就会出现一个同名的这个文件 新建一个Text Inspector面板 点击最底下的Extra Settings 然后把刚刚创建的SpriteAsset拖过来 放到对应的地方 然后…

李沐:用随机梯度下降来优化人生!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今天我们来聊聊达叔 6 大核心算法之 —— 优化 算法。吴恩达:机器学习的六个核心算法! 梯度下降优化算法是机器…

HarmoneyOS星河版 安装和启动

一、下载和安装DevEco Studio 官网链接:OpenAtom OpenHarmony 1.1 找到对应的操作系统进行下载 创建安装Harmony的文件夹: 1.2 下载后进行安装 1.3 分别安装Node、Ohpm、SDK 分别安装Node、Ohpm和SDK 二、.创建一个新项目并运行 2.1 选择[OpenHarmon…

当OpenHarmony遇上OpenEuler

1、 安装openEuler 虚拟机、物理机器当然都可以安装。虚拟机又可以使用WSL、或者VMWare、VirtualBox虚拟机软件,如果需要安装最新版本,建议使用后者。当前WSL只支持OpenEuler 20.03。 1.1 WSL openEuler WSL的安装都是程序员的必备技能了,…

大学课设项目,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 三、运行图 前言 本次项目可以作为之前内容的一个扩展,学…

《数据安全产品及服务购买决策参考》

“新全球化”下的数据安全威胁态势与挑战 随着中国企业数字化转型和数字经济的高速发展,数据要素和数据安全的战略价值正不断提升。 同时,在“脱钩”与“新全球化”的全球政治经济博弈中,中国作为全球重要的数据安全市场之一,其…

LeetCode esay mid 记录

1486. 数组异或操作 感觉一般也用不到 emmm 灵茶山艾府传送门 推导过程可以结合官网部分观看 重点由两部分的结合 将特定部分转换为常见部分 0到n的异或和表示 2595. 奇偶位数 0x555是十六进制数,转换为二进制为 0101 0101 0101 class Solution {public int[…

90. 子集 II

90. 子集 II 原题链接:完成情况:解题思路:参考代码:_90子集II_递归法求子集_90子集II_迭代法求子集 错误经验吸取 原题链接: 90. 子集 II https://leetcode.cn/problems/subsets-ii/ 完成情况: 解题思路…

代码解读 | Hybrid Transformers for Music Source Separation[07]

一、背景 0、Hybrid Transformer 论文解读 1、代码复现|Demucs Music Source Separation_demucs架构原理-CSDN博客 2、Hybrid Transformer 各个模块对应的代码具体在工程的哪个地方 3、Hybrid Transformer 各个模块的底层到底是个啥(初步感受)&#xff1…

Vue48-ref属性

一、需求:操作DOM元素 1-1、使用原生的id属性 不太好! 1-2、使用 ref属性 原生HTML中,用id属性给元素打标识,vue里面用ref属性。 给哪个元素加了ref属性,vc实例对象就收集哪个元素!!&#xff0…

WebSocket 详解--spring boot简单使用案例

一、什么是WebSocket WebSocket 是一种网络通信协议,专为在单个 TCP 连接上进行全双工通信而设计。WebSocket 允许客户端和服务器之间的消息能够实时双向传输。这与传统的 HTTP 请求-响应模式有很大的不同。 二、WebSocket 的关键特性 双向通信:WebSocke…

Novartis诺华制药社招综合能力性格动机问卷入职测评笔试题库答案及包过助攻

【华东同舟求职】由资深各行业从业者建立的一站式人才服务网络平台,现阶段目标是“提升全市场各行业岗位信息的流动性和透明度”。我们接受众多行业机构的直接委托发布,并尽力通过各种方法搜寻高价值岗位信息。事实上,我们以发现不为人知的优…