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

news2025/1/12 5:02:50

一、说明

        准确预测股市走势长期以来一直是投资者和交易员难以实现的目标。虽然多年来出现了无数的策略和模型,但有一种方法最近因其能够捕获历史数据中的复杂模式和依赖关系而获得了显着的关注:长短期记忆(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.coloradmin.cn/o/917651.html

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

相关文章

Android初学之android studio运行java/kotlin程序

第一步骤:File—>New—>New Module,然后弹出一个框,(左边)选择Java or Kotlin Library,(右边)编辑自己的图书馆名、包名、类名,选择Java一个语言,然后F…

分享漂亮electerm主题

Electerm 字体建议设置为:Consolas 和 Microsoft YaHei UI 主题配置如下: themeNameNice main-dark#171717 main-light#2E3338 text#ddd text-light#fff text-dark#888 text-disabled#777 primary#CACACA info#FFD166 success#06D6A0 error#EF476F wa…

Unity shader 入门之渲染管线一、总览

如下示意图 应用阶段(ApplicationStage):准备场景信息(视景体,摄像机参数)、粗粒度剔除、定义每个模型的渲染命令(材质,shader)——由开发者定义,不做讨论。几何阶段(GemetryStage)&…

星戈瑞分析FITC-PEG-Alkyne的荧光特性和光谱特性

​欢迎来到星戈瑞荧光stargraydye!小编带您盘点: FITC-PEG-Alkyne的荧光特性和光谱特性是对其荧光性能进行分析的方面。以下是FITC-PEG-Alkyne的一些常见荧光特性和光谱特性: **1. 荧光激发波长:**FITC-PEG-Alkyne的荧光激发波长通…

【校招VIP】java语言考点之分代垃圾回收

考点介绍: JVM垃圾回收是面试里绕不开的考点,尤其是分代回收算法,集各种普通垃圾回收于一身,成为垃圾回收之王。但是也造成多个阶段的GC的不同,需要从对象的大小和使用频度等角度去考虑每个阶段的算法选择和造成的问题…

Docker 微服务实战

1. 通过IDEA新建一个普通微服务模块 1.1 建Module docker_boot 1.2 改写pom <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…

OpenHarmony应用实现二维码扫码识别

本文转载自《OpenHarmony应用实现二维码扫码识别》&#xff0c;作者zhushangyuan_ 概念介绍 二维码的应用场景非常广泛&#xff0c;在购物应用中&#xff0c;消费者可以直接扫描商品二维码&#xff0c;浏览并购买产品&#xff0c;如图是购物应用的扫描二维码的页面。 本文就以橘…

TUME儿童毛毯上架亚马逊做CPC认证测试

毛毯(英文Blanket)&#xff0c;是一种常用的床上用品&#xff0c;具有保暖功能&#xff0c;与被子相比较薄。其原料多采用动物纤维&#xff08;如羊毛、马海毛、兔毛、羊绒、驼绒、牦牛绒&#xff09;或腈纶、粘胶纤维等化学纤维&#xff0c;也有的是动物纤维与化纤混纺制成的。…

软件产品需要做测评报告吗?

软件测试报告 毋庸置疑&#xff0c;当然需要&#xff0c;软件测试报告对软件测试过程中的评估、沟通、风险掌控、缺陷修复、发展方向等方面都有着非常重要的作用。接下来我们具体讲讲&#xff1a; 1、软件产品质量的客观评价 &#xff08;1&#xff09;发现软件产品存在的问题…

蓄电池管理,金融公司需警惕!

蓄电池在数据中心的UPS系统中作为备用电源&#xff0c;可以在电力中断时提供持续的电力供应&#xff0c;以保障数据中心的正常运行。 因此&#xff0c;蓄电池监控在数据中心行业具有重要意义。 客户案例 上海某金融服务公司拥有多个数据中心&#xff0c;为其核心业务提供支持。…

vue3 实现按钮权限管理

在做后台管理系统时&#xff0c;经常会有权限管理的功能&#xff0c;这里来记录一下关于按钮权限管理的实现方法 1、自定义指令 v-permission。新建js文件用来写指令代码。 export default function btnPerms(app) {app.directive(permission, {mounted(el, binding) {if (!p…

使用动态IP是否会影响网络

今天我们要谈论的话题是关于动态IP和网络的关系。也许有些小伙伴对这个概念还比较陌生&#xff0c;但别担心&#xff0c;我会简单明了的给你理清楚。让我们一起看看动态IP到底能否影响到网络。 首先&#xff0c;我们先来搞明白什么是动态IP。在互联网世界中&#xff0c;每一个连…

开源容灾备份软件,开源cdp备份软件

数据的安全性和完整性面临着硬件问题、黑客攻击、人为错误等各种威胁。在这种环境下&#xff0c;开源容灾备份软件应运而生&#xff0c;通过提供自动数据备份和恢复&#xff0c;有效地保证了公司的数据安全。 一、开源容灾备份软件的定义和作用 开源容灾备份软件是一种基于开源…

ConfigMap(可变应用配置管理)

实验环境 实验环境&#xff1a; 1、win10,vmwrokstation虚机&#xff1b; 2、k8s集群&#xff1a;3台centos7.6 1810虚机&#xff0c;1个master节点,2个node节点k8s version&#xff1a;v1.22.2containerd://1.5.5实验软件(无) 1 基础知识 1.1 什么是ConfigMap(可变配置管理…

【算法日志】动态规划:动态规划简介及其简单应用(day33)

算法随想录刷题60Day 目录 动态规划简介 动态规划简单应用 斐波那契 爬楼梯 使用最小开支爬楼 动态规划简介 动态规划(Dynamic Programming)是一种解决复杂问题的算法设计思想。它的主要思路是将原问题拆分若干个子问题&#xff0c;并分别求解这些子问题&#xff0c;最后将…

如何轻松打造美容行业预约小程序,无需编程基础

随着移动互联网的快速发展&#xff0c;小程序已经成为了很多企业和个人开展业务的重要阵地。而在美容行业&#xff0c;开发一款美容预约小程序无疑是一个非常有前景的选择。本文将介绍如何使用乔拓云平台&#xff0c;通过简单的几步操作&#xff0c;制作出一款功能强大的美容预…

Mybatis配置说明

目录 创建maven项目&#xff0c;添加mybatis&#xff0c;mysql依赖的jar包 创建mybatis全局配置文件,配置数据库连接信息,配置sql映射文件 创建sql映射文件 创建一个访问接口 测试 mybatis原是apache的一个开源项目&#xff0c;2010年转投谷歌,从ibtais3.0开始改名为myba…

Ansible 临时命令搭建安装仓库

创建一个名为/ansible/yum.sh 的 shell 脚本&#xff0c;该脚本将使用 Ansible 临时命令在各个受管节点上安装 yum 存储库. 存储库1&#xff1a; 存储库的名称为 EX294_BASE 描述为 EX294 base software 基础 URL 为 http://content/rhel8.0/x86_64/dvd/BaseOS GPG 签名检查为…

【附安装包】Midas Civil2019安装教程

软件下载 软件&#xff1a;Midas Civil版本&#xff1a;2019语言&#xff1a;简体中文大小&#xff1a;868.36M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.5GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.…

solidity0.8.0的应用案例11:透明代理合约

选择器冲突 智能合约中,函数选择器(selector)是函数签名的哈希的前4个字节。例如mint(address account)的选择器为bytes4(keccak256("mint(address)")),也就是0x6a627842. 由于函数选择器仅有4个字节,范围很小,因此两个不同的函数可能会有相同的选择器,例如…