基于LSTM模型的股票预测实践

简介

LSTM是一种常用的循环神经网络,其全称为“长短期记忆网络”(Long Short-Term Memory Network)。相较于传统的循环神经网络,LSTM具有更好的长期记忆能力和更强的时间序列建模能力,因此在各种自然语言处理、语音识别、时间序列预测等任务中广泛应用。

LSTM网络中包含了三种重要的门结构:输入门、遗忘门和输出门,可以有效地控制每个时间步长的状态和记忆信息的流动。在训练过程中,LSTM网络通过反向传播算法对参数进行优化。

LSTM模型的基本原理是循环神经网络(Recurrent Neural Networks, RNNs),具有比传统的前向神经网络更强的处理序列数据能力。在循环神经网络中,神经元的输出不仅受到当前输入的影响,还受到前一时刻的输入的影响,因此可以对序列数据中的上下文进行建模。

LSTM网络在RNN基础上增加了多个门结构,包括输入门(input gate)、遗忘门(forget gate)和输出门(output gate),这些门结构通过控制信息的流动,可以有效地维护和更新LSTM中的内部状态和长期记忆。具体来说,输入门控制新输入的信息进入内部状态,遗忘门控制从内部状态中删除不必要的信息,输出门则控制从内部状态中输出信息。

具体来说,LSTM模型中有三个关键的状态:输入状态 C_{t}、输出状态 h_{t}和记忆状态 m_{t}。其中,输入状态表示当前时刻的输入,输出状态则是当前时刻的输出,记忆状态则用于存储和更新历史信息。LSTM模型的计算流程可以简述如下:

1. 根据当前输入x_{t}和前一时刻的输出h_{t-1}计算当前输入状态C_t^\prime
2. 根据当前输入x_{t}和前一时刻的输出h_{t-1}计算遗忘门f_t
3. 根据当前输入x_{t}和前一时刻的输出h_{t-1}计算输出门o_t
4. 计算记忆状态更新量m_{t},即通过输入状态和遗忘门控制信息的流动。
5. 计算输出状态h_{t},即通过记忆状态和输出门控制信息的流动。

LSTM模型的训练过程通常采用梯度下降算法更新模型参数,可以使用反向传播算法计算梯度并进行优化,也可以使用其他的随机梯度下降算法或者优化器。

LSTM模型构建

构建LSTM模型通常需要以下步骤:

1. 数据预处理:将原始数据进行归一化、平滑或其他处理,以便于LSTM模型能够处理。
2. 特征工程:根据具体任务需求,提取适合LSTM模型的特征,常见的包括时序特征、频域特征等。
3. 划分数据集:LSTM模型需要使用历史数据进行训练和测试,因此需要将数据集划分为训练集和测试集。
4. 定义模型:使用Keras、TensorFlow等深度学习框架,定义LSTM模型的结构和参数。
5. 训练模型:使用训练集对LSTM模型进行训练,并进行模型参数的优化。
6. 模型评估:使用测试集对训练好的LSTM模型进行评估,可以使用各种评价指标,如准确率、均方误差等。
7. 模型预测:使用训练好的LSTM模型对未来数据进行预测。

具体地,LSTM模型的构建可以遵循以下一般性的步骤:

1. 定义模型:通常可以使用Keras等深度学习框架来快速定义LSTM模型,包括LSTM层和输入层、输出层等。
2. 编译模型:设置损失函数和优化器等训练参数,通常可以使用均方误差或交叉熵作为损失函数,使用Adam、SGD等优化器进行参数优化。
3. 训练模型:使用训练数据来训练LSTM模型,在每轮训练后可以使用测试数据来验证LSTM模型的性能。
4. 模型评估:通过测试集进行评估,并根据评估结果对模型进行改进。
5. 模型预测:使用训练好的LSTM模型对新的数据进行预测。

通过LSTM模型预测股票源码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dropout, Dense
from tensorflow.keras.callbacks import EarlyStopping# load data and preprocessing
df = pd.read_csv('./stock_k_data/sh000000.csv')
df.columns = ['datetime', 'open', 'high', 'low', 'close', 'volumn']
df = df.drop('datetime', axis=1)
scaler = MinMaxScaler(feature_range=(0, 1))
df_log = df.copy()
df_log[df_log.columns.tolist()] = scaler.fit_transform(df_log[df_log.columns.tolist()])# split n feature
def seq2dataset(data, time_step):n_features = data.shape[1]X, Y = [], []for i in range(len(data)-time_step):x = data[i:(i+time_step), :]y = data[i+time_step, :]X.append(x)Y.append(y)return np.array(X), np.array(Y)# serial data division, 15min*32=2day
time_step = 32
train_size = int(len(df_log) * 0.7)
train, test = df_log[:train_size], df_log[train_size:]
trainX, trainY = seq2dataset(train.values, time_step)
testX, testY = seq2dataset(test.values, time_step)# create model based on trainX
n_features = trainX.shape[2]
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(trainX.shape[1], n_features)))
model.add(Dropout(0.2))model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))model.add(LSTM(units=50, return_sequences=False))
model.add(Dropout(0.2))model.add(Dense(units=5, activation='linear'))# compile and training
model.compile(optimizer='adam', loss='mean_squared_error', run_eagerly=True)
early_stopping = EarlyStopping(monitor='loss', patience=5)
history = model.fit(trainX, trainY, epochs=100, batch_size=32, verbose=2,validation_data=(testX, testY), callbacks=[early_stopping])# predict train and test data, and inverse transform
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform(trainY)
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform(testY)# show result
plt.figure(figsize=(20, 8))
plt.plot(df.index, df['close'], label='Real Data')
plt.plot(train.index[time_step:train_size], trainPredict[:, 0], label='Training Predict')
plt.plot(test.index[time_step:], testPredict[:, 0], label='Testing Predict')
plt.legend(loc='best')
plt.show()

运行结果:

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

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

相关文章

基于LSTM的股票价格预测模型【附源码】

导语:本文介绍了LSTM的相关内容和在股票价格预测上的应用。 LSTM(Long Short Term Memory)是一种 特殊的RNN类型,同其他的RNNs相比可以更加方便地学习长期依赖关系,因此有很多人试图将其应用于 时间序列的预测问题 上。 汇丰银行全球资产管理…

基于LSTM与Transfomer的股票预测模型

基于LSTM与Transfomer的股票预测模型 1 项目介绍 股票行情是引导交易市场变化的一大重要因素,若能够掌握股票行情的走势,则对于个人和企业的投资都有巨大的帮助。然而,股票走势会受到多方因素的影响,因此难以从影响因素入手定量…

ARIMA模型来预测股票数据

本篇博文主要介绍如何用ARIMA模型来对股票数据做时序预测的。 文章目录 获取数据数据预处理模型识别假设检验模型预测 获取数据 这里用的是tushare库,得到万科股票半年的数据。 import tushare as t1 t1.set_token(你自己的token) tst1.pro_api() df ts.get_k_d…

基于遗传算法的BP神经网络的股票预测模型_matlab实现

文章目录 摘要bp神经网络遗传算法实验结果与分析完整代码下载: 摘要 在目前的股票投资市场,不少自然人股民的投资主要方式使根据对当天或者一个较长周期对股票数据的预测,来得到下一天的股票数据,从而进行相应的投资。为了满足股…

基于LSTM的股票预测模型_python实现_超详细

文章目录 一、背景二、主要技术介绍1、RNN模型2、LSTM模型3、控制门工作原理四、代码实现五、案例分析六、参数设置七、结论运行环境完整程序下载 一、背景 近年来,股票预测还处于一个很热门的阶段,因为股票市场的波动十分巨大,随时可能因为…

这样给宝宝起小名,好听不俗气

你家宝宝的小名叫什么? 对于父母来说,他们的宝宝不仅是这个世界上独一无二的宝贝,而且还是上天送给他们最珍贵的的礼物,所以,当他们来到这个世上的时候,父母总是喜欢把世上最美好的东西上赠与他们&#xf…

怎么样给小孩取名字?准爸妈为孩子起名字的另类姿势

老一辈都说:赐子千金,不如教子一艺,教子一艺,不如赐子好名。所以说,名字对孩子的重要性简直是不言而喻。要是起的名字奇奇怪怪的或者是寓意不好的话,大家会发现,孩子可能从去上学,就…

C# 名字五格测试

先申明,看着这个罗莊罗大师罗半仙的文章 https://blog.csdn.net/luozhuang/article/details/8725396 https://blog.csdn.net/luozhuang/article/details/8729523 他这是java版本的 我看了下,把它改成了C#版本 直接上代码吧 比较乱 没有优化命名啥的…

微信小程序:宝宝起名神器微信小程序

2022年马上到了,还不知道怎么给虎宝宝取名字嚒 那么这款小程序源码就可以帮到你了 这款小程序支持输入姓氏自动起名,不满意还可以点击换一换来找到满意的 支持起两个字或者三个字的名字 另外小编也给该款小程序添加了几个流量主广告给大家 小程序源码下载地址: 微…

根据谐音自动转换英文名的网站~如何起一个流行、有意义的英文名?你的英文名有什么内在意义吗?

今天发现自己的英文名有点low,想重新起一个。百度一搜,发现起名的网站真不少,定睛一看,起个名字要几十块?爱了爱了。 于是我花了半天时间研究,综合了网上的资源,写出这篇攻略。 ps&#xff1a…

目标检测算法——YOLOv5/YOLOv7改进之结合Swin Transformer V2(涨点神器)

&#x1f496;&#x1f496;>>>加勒比海带&#xff0c;QQ2479200884<<<&#x1f496;&#x1f496; &#x1f340;&#x1f340;>>>【YOLO魔法搭配&论文投稿咨询】<<<&#x1f340;&#x1f340; ✨✨>>>学习交流 | 温澜潮…

Pr——2020版本对导入视频如何编辑的操作

首先打开软件选择新建项目 填写好项目名称并选择该项目的位置&#xff0c;点击确定 在项目栏中右键&#xff0c;并选择导入&#xff0c;并选择想导入的视频 将视频拖动到时间轴栏&#xff0c;即可对视频进行你想要的操作。

Pr 入门系列之十:基本图形

在 Pr 中&#xff0c;文字&#xff08;包括字幕&#xff09;以及形状等被归类为图形 Graphics。 一个图形剪辑里可包含多个文本图层、形状图层以及其它媒体文件等图形元素。 提示&#xff1a; 1、图形剪辑不会出现在项目面板中&#xff0c;除非升级为源图。 2、与 Ps 一样&…

Pr 从入门到精通(合集)

PHOTOSHOPTEA 致力于打造随时可查、反复可用的工具手册&#xff0c;多数文章里少实例、无噱头。这样的文章在闲暇时读起来确实让人“头疼”。 但&#xff0c;当你遇到技术问题真正“头疼”的时候&#xff0c;其中一篇可能就是对症的“良药”&#xff1b;当你有所生疏或者有些遗…

开发中时常提到的提交pr是什么意思?

在编程开发领域&#xff0c;PR是Pull Request的缩写&#xff0c;一般用于Git/SVN等版本管理软件中。 它的过程是这样的&#xff1a;比如你在GitHub上看到一个很牛X的项目&#xff0c;你fork到自己仓库后&#xff0c;再改动一些代码&#xff0c;然后可以向提交一个pull request…

视频剪辑软件:Premiere Pro 2023 中文直装版(带语音转字幕)

Premiere Pro它是一款功能强大、灵活易用的视频编辑工具。该软件可以用于剪辑、调色、特效制作、音频处理等多种视频制作任务。Premiere Pro还支持多种视频格式&#xff0c;包括高清和超高清视频。 ​具有以下特点&#xff1a; 多格式支持&#xff1a;Premiere Pro支持多种视频…

Pr初识01

Pr初识 1.关于Pr&#xff1a;2.项目序列3.PR工作界面4.导入素材5.制式与素材管理6.剪辑与工具7.剪辑与工具&#xff08;下&#xff09;8.工具面板与时间轴面板进阶9.关键帧动画10.视频特效11.视频特效&#xff08;下&#xff09;12.音频及结合AU去除噪音13.字幕运用 1.关于Pr&a…

Premiere基础操作

一&#xff1a;设置缓存 二&#xff1a;ctrI导入素材 三&#xff1a;导入图像序列 四&#xff1a;打开吸附。 打开吸附后素材会对齐。 五&#xff1a;按~键可以全屏窗口。 六&#xff1a;向前选择轨道工具。 在时间线上点击&#xff0c;向前选中时间线上素材。向后选择轨道工具…

PR基础知识

什么是帧&#xff0c;什么叫帧速率&#xff0c;什么叫方形像素&#xff0c;什么叫场序…… 1、时长 时长为视频时间的长度&#xff0c;基本单位为秒。但是在PR软件中&#xff0c;有更为精准的时间单位计算为帧&#xff0c;也就是把1秒分为若干份&#xff0c;一份就是一帧&…

添加视频字幕后期制作Premiere Pro 2022中文

Premiere Pro 2022是一款PR视频剪辑软件&#xff0c;同时支持M1/M2芯片和Intel芯片安装&#xff0c;可以帮助用户提升自己的创作能力和创作自由度&#xff0c;具有易学、高效、精确的优点&#xff0c;可为用户提供采集、剪辑、调色、美化音频、字幕添加、输出、DVD刻录一整套的…