基于matlab的长短期神经网络lstm的股票预测

news2025/1/19 10:22:29

目录
背影
摘要
LSTM的基本定义
LSTM实现的步骤
基于长短期神经网络LSTM的股票预测
MATALB编程实现,附有代码,及链接基于matlab编程的的长短期神经网络LSTM的股票价格的预测,基于深度学习神经网络的股票价格预测-深度学习文档类资源-CSDN文库 https://download.csdn.net/download/abc991835105/87737909
效果图
结果分析
展望
参考论文

背影

股票市场的波动十分巨大,由于一些不确定因素的影响,导致很难对股票进行投资盈利。因此,利用长短期神经网络的特殊性,对股票价格进行预测,能提高股票的价格预测的准确率
摘要
LSTM原理,MATALB编程长短期神经网络LSTM的股票价格预测。

LSTM的基本定义

LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为它可以记忆不定时间长度的数值,区块中有一个gate能够决定input是否重要到能被记住及能不能被输出output。
图1底下是四个S函数单元,最左边函数依情况可能成为区块的input,右边三个会经过gate决定input是否能传入区块,左边第二个为input gate,如果这里产出近似于零,将把这里的值挡住,不会进到下一层。左边第三个是forget gate,当这产生值近似于零,将把区块里记住的值忘掉。第四个也就是最右边的input为output gate,他可以决定在区块记忆中的input是否能输出 。
图1 LSTM模型
图1 LSTM模型
LSTM有很多个版本,其中一个重要的版本是GRU(Gated Recurrent Unit),根据谷歌的测试表明,LSTM中最重要的是Forget gate,其次是Input gate,最次是Output gate

训练方法

为了最小化训练误差,梯度下降法(Gradient descent)如:应用时序性倒传递算法,可用来依据错误修改每次的权重。梯度下降法在递回神经网络(RNN)中主要的问题初次在1991年发现,就是误差梯度随着事件间的时间长度成指数般的消失。当设置了LSTM 区块时,误差也随着倒回计算,从output影响回input阶段的每一个gate,直到这个数值被过滤掉。因此正常的倒传递类神经是一个有效训练LSTM区块记住长时间数值的方法。

lstm的步骤

1 , LSTM的第一步是确定我们将从单元状态中丢弃哪些信息,这个策略有一个被称为遗忘门的sigmoid层决定。输入ht-1和xt遗忘门对应单元状态ct-1中每个数输出一个0到1之间的数字。1代表“完全保持”,0表示“完全遗忘”。

让那个我们回到我们的语言模型例子中尝试基于所有之前的词预测下一个词是什么。在这个问题中,单元状态中可能包括当前主题的性别,因此可以预测正确代词。当我们看到一个新的主题的性别时,我们想要忘记旧主题的性别。

=(W*[h-1,x]+b)

下一步将决定我们在单元状态中保存那些新信息。包括两个部分;第一”输入门层”的sigmoid层决定我们将更新那些值,第二,tanh层创建可以添加到状态的新候选值ct-1的向量。在下一步中,我们将结合这两个来创建状态更新。

在我们语言模型的例子中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧主题

=(W*[h-1,x]+b)

=tanh(W*[h-1,x]+b)

现在是时候将旧的单元状态ct-1更新为新的单元状态ct,之前的步骤已经决定要做什么,我们只需要实际做到这一点。我们将旧状态乘以ft,忘记我们之前决定忘记的事情,然后我们添加*Ct .这是新的候选值,根据我们的决定更新每个州的值来缩放。

在语言模型的情况下,我们实际上放弃了关于旧主题的性别的信息并添加新信息,正如我们在前面的步骤中所做的那样。

C=C-1+(1-)

最后,我们需要决定我们要输出的内容,此输出将基于我们的单元状态,但将是过滤版本,首先,我们运行一个sigmoid层,它决定我们要输出的单元状态的哪些部分,然后我们将单元状态设置为tanh(将值推到介于-1和1之间)并将其乘以sigmoid门的输出,以便我们只输出我们决定的部分。

对于语言模型示例,由于它只是看到一个主题,他可能想要输出与动物相关的信息,以防接下来会发生什么,例如,他输出主语是单数还是复数,一边我们知道动词应该与什么形式供轭。

O=(W[h-1,x]+b)

h=O*tanh©

​基于MATLAB编程的lstm长短期神经网络的股票价格预测

%% LSTM network
%% import data
clc
clear
close all
%读取double格式数据
[num,ax,ay] = xlsread(‘股票价格走势预测.xlsx’,1);

n = randperm(length(num));

m = 1000;
input_train =num(n(1:m),1:29);%训练数据输出数据
output_train = num(n(1:m),30);%训练数据输入数据
input_test = num((m+1:1400),1:29);%测试数据输出数据
output_test = num((m+1:1400),30);%测试数据输入数据
[inputn,inputps]=mapminmax(input_train’,-1,1);%训练数据的输入数据的归一化
[outputn,outputps]=mapminmax(output_train’,-1,1);%训练数据的输出数据的归一化de
inputn_test=mapminmax(‘apply’,input_test’,inputps);

%% Define Network Architecture
% Define the network architecture.
numFeatures = 29;%输入层维度
numResponses = 1;%输出维度
% 200 hidden units
numHiddenUnits = 50;%第一层维度
% a fully connected layer of size 50 & a dropout layer with dropout probability 0.5
layers = [ …
sequenceInputLayer(numFeatures)%输入层
lstmLayer(numHiddenUnits,‘OutputMode’,‘sequence’)%第一层
fullyConnectedLayer(30)%链接层
dropoutLayer(0.2)%遗忘层
fullyConnectedLayer(numResponses)%链接层
regressionLayer];%回归层

% Specify the training options.
% Train for 60 epochs with mini-batches of size 20 using the solver ‘adam’
maxEpochs = 60;%最大迭代次数
miniBatchSize = 20;%最小批量
% the learning rate == 0.01

% set the gradient threshold to 1
% set ‘Shuffle’ to ‘never’
options = trainingOptions(‘adam’, … %解算器
‘MaxEpochs’,maxEpochs, … %最大迭代次数
‘MiniBatchSize’,miniBatchSize, … %最小批次
‘InitialLearnRate’,0.01, … %初始学习率
‘GradientThreshold’,1, … %梯度阈值
‘Shuffle’,‘every-poch’, … %打乱顺序
‘Plots’,‘training-progres’,… %画图
‘Verbose’,0); %不输出训练过程

%% Train the Network
net = trainNetwork(inputn,outputn,layers,options);%开始训练

%% Test the Network
y_pred = predict(net,inputn_test,‘MiniBatchSize’,20)‘;%测试仿真输出
y_pred=(mapminmax(‘reverse’,y_pred’,outputps))‘;
% y_pred0 = predict(net,inputn,‘MiniBatchSize’,1)’;%训练拟合值
% y_pred0=(mapminmax(‘reverse’,y_pred0’,outputps))';
y_pred=(double(y_pred));
figure%打开一个图像窗口
plot(y_pred(:,1),‘k-’)%黑色实线,点的形状为*
hold on%继续画图
plot(output_test(:,1),‘r–’)%红色实线,点的形状为o
hold off%停止画图
title(‘测试图’)%标题
ylabel(‘收盘价’)%Y轴名称
legend(‘测试值’,‘实际值’)%标签

error1 = y_pred-output_test;%误差
figure
plot(error1(:,1),‘k-’)
title(‘收盘价测试误差图’)
ylabel(‘误差’)

[MSE,RMSE,MBE,MAE ] =MSE_RMSE_MBE_MAE(output_test,y_pred);

result_table = table;
result_table.sim = y_pred;
result_table.true = output_test;
writetable(result_table,‘./结果.csv’)

结果图

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

结果分析

从图中可以看出来,基于长短期神经网络LSTM的股票价格预测 ,预测准确,泛发性好

展望

长短期神经网络在处理有时间关联性的问题方面,拥有独特的优势,预测结果更平滑,稳定,并且可调参,股票价格属于时间序列的数据,,LSTM可以和其他是算法结合,比如粒子群优化LSTM参数,DBN+LSTM,等

参考论文

百科

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

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

相关文章

基于SpringBoot的线上日志阅读器

软件特点 部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式,支持大文件的读取。支持实时打印新增的日志(类终端)。支持日志搜索。 使用手册 基本页面 配置路径 配置日志所在的目录,配置后按回车…

new和delete相关知识点

new和delete基本介绍 malloc 和free 是C函数 new和delete是C的运算符 malloc失败是通过返回值和nullptr作比较;而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的 new不仅可以做内存开辟,还可以做内存初始化操作 malloc和new的区…

一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程

文章目录 一、MyBatis简介1.1 MyBatis历史1.2 MyBatis特性1.3 和其它持久化层技术对比1.4 Mybatis下载依赖包流程 一、MyBatis简介 1.1 MyBatis历史 ​ MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开…

【每日一题】4978:宠物小精灵之收服

目录 一:题目 二:分析 三:代码实现 一:题目 一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服…

MySql,

SQL语句分类 DDL:数据定义语句【create 表,库...】DML:数据操作语句【增加insert,修改update,删除delete】DQL:数据查询语句【select】DCL:数据控制语句【管理数据库:比如用户权限grant&#xf…

DITA技巧:图支持热点链接

- 1 - 场景 在文档或者手册中,我们常希望用户点击图上的某个对象自动跳转到这个对象的文字说明。 比如:点击下边爆炸图中的数字,跳转到这个数字指向的零件的说明。 比如:点击下图中的按钮,了解每个按钮的功能。 - 2…

2023增长为王,消费者数字化逆向重构消费企业

2023年对于消费企业来说,最大的主题就是回归增长。据不完全统计,2022年关闭的线下门店超过7400家,倒闭的底商不计其数,很多消费上市企业业绩表现不及预期,新上市企业数量和募资额度均减少…… 自从2015年后电商流量红…

大数据Doris(五):FE 扩缩容

文章目录 FE 扩缩容 一、通过MySQL客户端连接Doris 二、FE Follower扩缩容 1、准备 FE 安装包 2、在 node2 、 node3 上修改 fe.conf 配置文件 3、在 node2 、 node3 上启动 FE 4、添加 FE Follower 到 Doris 集群 三、FE Observer 扩缩容 1、准备 FE 安装包 2、在 n…

02 KVM安装虚拟化

文章目录 02 KVM安装虚拟化2.1 最低硬件要求2.2 安装虚拟化核心组件2.2.1 安装方法2.2.1.1 前提条件2.2.1.2 安装步骤 2.2.2 验证安装是否成功 02 KVM安装虚拟化 2.1 最低硬件要求 在openEuler系统中安装虚拟化组件,最低硬件要求: AArch64处理器架构&…

势能回馈系统超级电容储能系统介绍

在港口现有的常规单传动变频驱动系统中,门机在起升机构下降以及其他主要机构减速过程中,下降的势能和制动的动能将产生的再生能量传递给交流电动机后转换成再生电能,而单传动所配置的变频驱动系统通常通过采用制动单元和制动电阻将再生电能转…

一分钟图情论文:《数智时代情报学与情报工作的发展透视》

数智时代情报学与情报工作的发展透视 当前,以人工智能、大数据和云计算为代表的数智技术在社会各个领域的应用中发挥了独特而强大的作用,这对传统的情报学和情报工作带来了巨大的冲击和挑战。然而,这也为情报学和情报工作带来了机遇和发展空…

小白入门之args, *args, **kwargs

目录 一、介绍: 二、实例: 2.1 args 2.2 *args 2.2.1 基础版 2.2.2 进阶版 2.3 **kwargs 2.4 *args 和**kkwargs连用 一、介绍: 首先,不是必须写成*args和**kwargs,只有变量前面星号*才是必须的。也可以写成*…

[前端基础]promise的基本使用(包括async,await语法糖)

目录 1.什么是promise 2.关于promise对象 3.promise常用API 4.promise链式调用 5.async和await语法糖 1.什么是promise 众所周知,在以往,我们处理异步操作主要是通过回调函数处理 setTimeout(()>{},100); 例如这个定时器,异步操作会通过时间循环队列实现. 但是比如说…

PID控制---基于python模拟

PID是控制中非常经典的一个模型,利用P(比例)、I(微分)、D(积分)三者相互合作来实现对一个信号的闭环控制,同时可以让信号波形平滑变化而不是突变。以下主要是结合一个python实现的控制速度的程序来模拟PID的过程。 参考博客:电机控制进阶——…

SOA与中间件、基础件的发展

应运而生的SOA   美国著名的IT市场研究和顾问咨询公司Gartner预测:到2006年,采用面向服务的企业级应用将占全球销售出的所有商业应用产品的80 以上到2008年,SOA将成为绝对主流的软件工程实践方法。近几年全球各大IT巨头纷纷推出自己的面向服务的应用平…

WordPress切换为经典编辑器可视化/文本切换不显示解决方法

WordPress文章编辑器切换为经典编辑器可视化/文本状态无法切换消失的问题有用户遇到过,出现这样的问题时,我们首先应该回忆一下,之前自己进行了哪些操作导致这种情况的出现,比如: 更换了新主题? 安装了新插…

软考高项 - 计算公式汇总整理

大家好,我是陈哈哈,我准备参加23年5月份的软考信息项目管理师考试,学习之余还是习惯做一些重点、考点的记录,用于自己复习,以及分享给日后考试的考友,啥都不说了,祝通过🌹&#x1f3…

【设计模式】UML类图与软件设计原则

1,设计模式概述 1.1 软件设计模式的产生背景 "设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexand…

Docker基础学习1

Docker 1 Docker简介 1.1 什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来&…

数字温度传感器-DS18B20

文章目录 一、DS18B20器件图二、DS18B20特点三、DS18B20内部结构内部构成 四、工作时序1.初始化时序2.ReadOneChar2.WriteOneChar 一、DS18B20器件图 DS18B20的管脚排列: GND为电源地;DQ为数字信号输入/输出端;VDD为外接供电电源…