股票预测和使用LSTM(长期-短期-记忆)的预测

一、说明

        准确预测股市走势长期以来一直是投资者和交易员难以实现的目标。虽然多年来出现了无数的策略和模型,但有一种方法最近因其能够捕获历史数据中的复杂模式和依赖关系而获得了显着的关注:长短期记忆(LSTM)。利用深度学习的力量,LSTM 提供了一种很有前途的途径,可以深入了解股票市场的不可预测性。在本文中,我们将深入研究基于LSTM的股票市场预测领域,并探讨这种创新方法如何有可能改变投资策略。

成功分析和预测后的绘图预测。

成功分析和预测后的绘图预测。

        LSTM的核心是递归神经网络(RNN)的变体,专门用于解决困扰传统RNN的梯度消失问题。梯度消失问题是指网络中早期层的梯度变得越来越小,阻碍了它们捕获长期依赖性的能力的现象。LSTM 通过整合存储单元、门和精心设计的连接来克服这一限制,使其能够在较长的时间间隔内有选择地保留和传播信息。这种独特的架构使 LSTM 模型能够捕获顺序数据中错综复杂的时间关系,使其特别适合预测时间序列数据,例如股票价格。

二、LSTM记忆网络

        要了解更多回合 LSTM ,请访问 :

了解长短期记忆 (LSTM) 算法

LSTM 算法是帮助机器理解和预测复杂数据的强大工具。了解 LSTM 如何适用于机器学习...

        让我们来看看我们的股票数据分析和预测。

2.1 导入所需库

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
import math
from sklearn.metrics import mean_squared_error

        在这里,我们导入了熊猫,用于绘图的matplotlib,用于预处理的numpy,sklearn用于预处理,尺度调整和误差计算,以及用于模型构建的张量流。

2.2 我移植数据集

        您可以在以下 GitHub 存储库中找到我使用的数据集。

GitHub - mwitiderrick/stockprice: Stock Price Prediction 教程的数据和笔记本

股票价格预测教程的数据和笔记本 - GitHub - mwitiderrick/stockprice:数据和笔记本...

github.com

df = pd.read_csv('D:/stockprice-master/NSE-TATAGLOBAL.csv')
df.head()

三、数据分析

df2 = df.reset_index()['Close']
plt.plot(df2)

图表显示数据集中的库存流

我们将在收盘价列上进行股票预测。

3.1 数据预处理

scaler = MinMaxScaler()
df2 = scaler.fit_transform(np.array(df2).reshape(-1,1))
df2.shape

(2035, 1)

在这里,我们缩小 (0,1) 之间的值。

3.2 训练-测试拆分

train_size = int(len(df2)*0.65)
test_size = len(df2) - train_size
train_data,test_data = df2[0:train_size,:],df2[train_size:len(df2),:1]

        在这里,我们获取了 65% 的数据用于训练,其余 35% 用于测试。

def create_dataset(dataset, time_step = 1):dataX,dataY = [],[]for i in range(len(dataset)-time_step-1):a = dataset[i:(i+time_step),0]dataX.append(a)dataY.append(dataset[i + time_step,0])return np.array(dataX),np.array(dataY)

        创建一个函数作为 create_dataset(),它根据我们采取的时间步长将数据集分成 2 个。第一个数据集,即;dataX 将值作为其输入,第二个数据集 dataY 将值作为输出。基本上,它从上述数据集创建一个数据集矩阵。

# calling the create dataset function to split the data into 
# input output datasets with time step 100
time_step = 100
X_train,Y_train =  create_dataset(train_data,time_step)
X_test,Y_test =  create_dataset(test_data,time_step)
# checking values
print(X_train.shape)
print(X_train)
print(X_test.shape)
print(Y_test.shape)

(1221, 100)
[[0.62418301 0.62214052 0.62622549 ...0.83455882 0.86213235 0.85273693]
[0.62214052 0.62622549 0.63378268 ...0.86213235 0.85273693 0.87111928]
[0.62622549 0.63378268 0.62234477 ...0.85273693 0.87111928 0.84497549]
...
[0.34517974 0.31781046 0.33047386 ...0.2816585 0.27001634 0.26531863]
[0.31781046 0.33047386 0.32128268 ...0.27001634 0.26531863 0.27389706]
[0.33047386 0.32128268 0.34007353 ...0.26531863 0.27389706 0.25347222]](612, 100)(612,)

四、创建和拟合 LSTM 模型

model = Sequential()
model.add(LSTM(50,return_sequences = True,input_shape = (X_train.shape[1],1)))
model.add(LSTM(50,return_sequences = True))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(loss = 'mean_squared_error',optimizer = 'adam')

        在这里,我们添加了 4 层 LSTM,其中 1 层作为输入层,2 层作为隐藏层,1 层作为输出层作为 Dense。 在前 3 层中,我们取了 50 个神经元和 个用于输出。

        我们使用亚当优化器编译模型,该优化器将使用均方误差计算损失。

model.summary()

model.fit(X_train,Y_train,validation_data = (X_test,Y_test),epochs = 100,batch_size = 64,verbose = 1)

在这里,该模型已经训练了 100 个 epoch,每个 epoch 的批大小为 64。

五、预测和检查性能矩阵

train_predict = model.predict(X_train)
test_predict = model. Predict(X_test)
# transform to original form
train_predict = scaler.inverse_transform(train_predict)
test_predict = scaler.inverse_transform(test_predict)

        当我们在 0 和 1 中缩小数据集的值时,我们需要再次反转变换,以便在图上获得准确的预测值,因此,这里我们反转两个预测的变换。

        现在是计算rmse性能矩阵的时候了。

print(math.sqrt(mean_squared_error(Y_train,train_predict)))
print(math.sqrt(mean_squared_error(Y_test,test_predict)))

166.74853517776896
116.51567464682968

在这里,计算的两个值都非常接近,即;差值小于 50,表示模型精度良好

六 图形绘制

look_back = 100
trainPredictPlot = np.empty_like(df2)
trainPredictPlot[:,:] = np.nan
trainPredictPlot[look_back : len(train_predict)+look_back,:] = train_predict

        回看变量采用当前值后面的值数,即;记住与 LSTM 相同的前 100 个值。在这里,每次绘制图形时,trainPredictionPlot 都会在它们后面取 100 个值并绘制它。绘图从前 100 个值开始,一直到火车预测的长度 + 回溯,即 100。

testPredictPlot = np.empty_like(df2)
testPredictPlot[:,:] = np.nan
testPredictPlot[len(train_predict)+(look_back)*2 + 1 : len(df2) - 1,:] = test_predict

        TestPredictionPlot 也是如此,但这次它采用Train_predict旁边的值。这里回顾将从火车预测结束的地方开始。

plt.plot(scaler.inverse_transform(df2))
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
plt.show()

        在这里,橙色是TrainPredictionPlot,绿色是TestPredictionPplot,蓝色是实际数据集。因此,我们可以看到我们的模型很好地预测了股票价格。

        该模型仅用于学习目的,不建议用于任何未来的投资。普拉吉瓦尔·乔汉

七、结论

        总之,利用长期短期记忆(LSTM)进行股票市场预测代表了财务预测领域的重大飞跃。这种基于深度学习力量的创新方法展示了其捕获历史股票市场数据中复杂模式和依赖关系的潜力。通过将LSTM模型纳入投资策略,交易者和投资者可以在驾驭股票市场的不可预测性中获得宝贵的优势。

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

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

相关文章

UE4/5Niagara粒子特效之Niagara_Particles官方案例:2.4->3.2

之前的案例 UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.1->1.4_多方通行8的博客-CSDN博客 UE4/5Niagara粒子特效之Niagara_Particles官方案例:1.5->2.3_多方通行8的博客-CSDN博客 2.4 Location Events 这次的项目和之…

自动化测试之Selenium

自动化测试Selenium介绍环境搭建如何操作浏览器定位元素css类选择器定位元素xpath定位元素css选择语法xpath选择语法 常用操作添加等待打印信息浏览器更多操作键盘事件鼠标事件特殊场景只选复选框iframe标签下拉框处理弹窗显示上传文件 关闭浏览器切换窗口截图 自动化测试 自动…

JavaSE 认识String类

目录 1 创建字符串2 字符串比较相等3 字符串常量池4 理解字符串不可变5 字符、字节与字符串5.1 字符与字符串5.2 字节与字符串5.3 小结 6 字符串常见操作6.1 字符串比较6.2 字符串查找6.3 字符串替换6.4 字符串拆分6.5 字符串截取6.6 其他操作方法 7 StringBuffer 和 StringBui…

【Linux】文件的描述符和重定向

文件的描述符和重定向 C语言的文件读写操作代码 open系统打开文件方法系统读写文件操作文件描述符文件重定向怎么理解文件缓冲区 C语言的文件读写操作 文件写入 fputs int fputs(const char *s, FILE *stream); s:要写入的字符串 stream:要写入对应的目标…

TCP最大连接数问题总结

最大TCP连接数量限制有:可用端口号数量、文件描述符数量、线程、内存、CPU等。每个TCP连接都需要以下资源,如图所示: 1、可用端口号限制 Q:一台主机可以有多少端口号?端口号与TCP连接?是否能修改&#x…

echarts 之 科技感进度条

1.图片展示 2.代码实现 /* ng qty 进度条 */ <template><div class"ngqty-progress"><div class"ngqty-info"><span>X4</span><span>50%</span></div><div :id"barNgQtyProgress index" c…

Java进阶(7)——手动实现LinkedList 内部node类的实现 增删改查的实现 toString方法 源码的初步理解

目录 引出从ArrayList到Linkedlist手动实现ArrayList从ArrayList到LinkedList 总体设计Node类Node的方法&#xff1a;根据index找node 增删改查的实现增加元素删除元素修改元素查询元素 toString方法完整代码List接口类LinkedList的实现测试类 总结 引出 1.linkedList的节点&am…

基于JJWT理解JWT,JWS,JWE

JWT &#xff0c; 全写JSON Web Token, 是开放的行业标准RFC7591&#xff0c;用来实现端到端安全验证. 从开发者理解的角度来说&#xff1a; JWT 是一个定义传递信息的标准JWT 的Token是一个Base64编码的字符串&#xff0c; 类似 eyJhbGciOiJIUzI1NyJ9.eyJzdWIiOiJvc2NhciJ9.…

房屋结构健康监测,科技助力让建筑更安全

房屋建筑是人们赖以生存的场所&#xff0c;然而当前我国许多房屋已经达到了使用寿命的中期&#xff0c;房屋的安全系数逐年降低&#xff0c;风险也随着时间的推移而累积。长期以来&#xff0c;我国的房屋普遍存在寿命短、隐患多的问题&#xff0c;“重建设&#xff0c;轻管理”…

探索PDF校对:为何这是现代数字文档的关键步骤

在今日的数字化浪潮中&#xff0c;文档的创建与分享从未如此频繁。尤其是PDF&#xff0c;作为一个普遍接受的标准文件格式&#xff0c;其在企业、学术和日常生活中的应用已经无处不在。但随之而来的挑战是如何确保文档的准确性和专业性。让我们深入探索PDF校对的重要性以及它为…

element-ui中的el-table的summary-method(合计)的使用

场景图片&#xff1a; 图片1&#xff1a; 图片2&#xff1a; 一&#xff1a;使用element中的方法 优点&#xff1a; 直接使用summary-method方法&#xff0c;直接&#xff0c;方便 缺点&#xff1a; 只是在表格下面添加了一行&#xff0c;如果想有多行就不行了 1&#xff1a;h…

一、MQ的基本概念

1、初识MQ MQ全称是Message Queue&#xff0c;消息队列&#xff0c;多用于系统之间进行异步通信。队列的概念数据结构中有详细介绍过&#xff0c;先进先出&#xff0c;消息队列就是存储消息的数据结构。 同步调用和异步调用两者之间的区别&#xff1a; 同步调用&#xff1a;发…

opencv-dnn

# utils_words.txt 标签文件 import osimage_types (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")def list_images(basePath, containsNone):# return the set of files that are validreturn list_file…

gdb 条件断点

条件断点&#xff0c;顾名思义就是有条件才会触发的断点&#xff0c;一般设置此类断点形如&#xff1a;b xxx if xxx&#xff0c;如&#xff1a; 要触发此断点则需要 is_created 0。打完断点我们也可以用 info b 查看一下当前已经设置的断点信息&#xff0c;如&#xff1a; 断…

探索未知世界:桌面端3D GIS引领地理信息新时代

近年来&#xff0c;桌面端的三维地理信息系统&#xff08;3D GIS&#xff09;在地理信息领域迎来了显著的发展&#xff0c;为我们带来了更深入、更丰富的地理空间认知和数据分析体验。从城市规划到环境保护&#xff0c;从资源管理到应急响应&#xff0c;桌面端的3D GIS正逐渐成…

Java程序设计——在一个给定的字符串中查找并解析姓名、出生日期、个人网站、身高和体重信息,并输出相应的结果

package ch4;public class FindMess {public static void main(String[] args) {String mess "姓名:张三 出生时间:1989.10.16。个人网站:http://www.zhang.com。身高:185 cm,体重:72 kg";int index (int)(mess.indexOf(":")); //mess调用indexOf(Stri…

git Update failed cannot lock ref

报错详情 解决方案 百度了很多方案&#xff0c;过滤出了有效方案 去该项目下的.git文件里找到报错文件&#xff0c;本例中即为&#xff1a;.git/refs/tags/pre-RELEASE-PRE-20230817-03 删除该文件&#xff0c;重新pull&#xff0c;pull成功问题解决

Java并发工具类

JDK并发包中常用并发工具类&#xff1a; CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段&#xff1b; Exchanger工具类则提供了在线程间交换数据的一种手段。 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成…

Electron学习3 使用serialport操作串口

Electron学习3 使用serialport操作串口 一、准备工作二、 SerialPort 介绍1. 核心软件包(1) serialport(2) serialport/stream(3) serialport/bindings-cpp(4) serialport/binding-mock(5) serialport/bindings-interface 2. 解析器包3. 命令行工具 三、创建一个demo程序1. 创建…

Dapper

介绍 dapper是一款轻量级的ORM Dapper 被称为 ORM 之王。 以下是 Dapper 的主要功能&#xff1a; 速度快&#xff0c;性能快。 更少的代码行。 对象映射器。 静态对象绑定。 动态对象绑定。 轻松处理 SQL 查询。 易于处理存储过程。 直接对 IDBConnection 类进行操作&#xf…