如何预测股票分析--长短期记忆网络(LSTM)

上一篇中,我们回顾了先知的方法,但是在这个案例中表现也不是特别突出,今天介绍的是著名的l s t m算法,在时间序列中解决了传统r n n算法梯度消失问题的的它这一次还会有令人杰出的表现吗?

长短期记忆(Long Short-Term Memory) 是具有长期记忆能力的一种时间递归神经网络(Recurrent Neural Network)。 其网络结构含有一个或多个具有可遗忘和记忆功能的单元组成。它在1997年被提出用于解决传统RNN(Recurrent Neural Network) 的随时间反向传播中权重消失的问题(vanishing gradient problem over backpropagation-through-time),重要组成部分包括Forget Gate, Input Gate, 和 Output Gate, 分别负责决定当前输入是否被采纳,是否被长期记忆以及决定在记忆中的输入是否在当前被输出。Gated Recurrent Unit 是 LSTM 众多版本中典型的一个。因为它具有记忆性的功能,LSTM经常被用在具有时间序列特性的数据和场景中。

LSTM 算法广泛应用于序列预测问题中,并被证明是一种非常有效的方法。它们之所表现如此出色,是因为LSTM能够存储重要的既往信息,并忽略不重要的信息。

LSTM有三个门:

  • 输入门:输入门将信息添加到细胞状态
  • 遗忘门:它移除模型不再需要的信息
  • 输出门:LSTM的输出门选择作为输出的信息

要更详细地了解LSTM及其体系结构,可以阅读下面的文章:

  • 长短期记忆网络简介

现在,让我们将LSTM实现为一个黑盒,并检查它在特定数据上的性能。

实现

#importing required libraries 导入必要的库函数

from sklearn.preprocessing import MinMaxScaler

from keras.models import Sequential

from keras.layers import Dense, Dropout, LSTM

#creating dataframe 搭建p d的数据框架,利用循环填充框架的内容

data = df.sort_index(ascending=True, axis=0)

new_data = pd.DataFrame(index=range(0,len(df)),columns=[‘Date‘, ‘Close‘])

for i in range(0,len(data)):

new_data[‘Date‘][i] = data[‘Date‘][i]

new_data[‘Close‘][i] = data[‘Close‘][i]

#setting index 设定数据的索引,刨除date列

new_data.index = new_data.Date

new_data.drop(‘Date‘, axis=1, inplace=True)

#creating train and test sets 划分训练集测试集

dataset = new_data.values

train = dataset[0:987,:]

valid = dataset[987:,:]

#converting dataset into x_train and y_train 将两个数据集归一化处理

scaler = MinMaxScaler(feature_range=(0, 1))

#总数据集归一化

scaled_data = scaler.fit_transform(dataset)

#确定正式训练集测试集,大小是在刚刚划分的数据集合中,按60:1的比例划分,这里的划分不能算是k折交叉验证,知道的朋友麻烦留言解答一下,感谢??

x_train, y_train = [], []

for i in range(60,len(train)):

x_train.append(scaled_data[i-60:i,0])

y_train.append(scaled_data[i,0])

#转为numpy格式

x_train, y_train = np.array(x_train), np.array(y_train)

#重新改变矩阵的大小,这里如果不理解可以参考我的传送门

x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))

# create and fit the LSTM network 建立模型

model = Sequential()

model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1],1)))

model.add(LSTM(units=50))

model.add(Dense(1))

#编译模型,并给模型喂数据

model.compile(loss=‘mean_squared_error‘, optimizer=‘adam‘)

model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)

#predicting 246 values, using past 60 from the train data 用测试集最后的60个数据

inputs = new_data[len(new_data) - len(valid) - 60:].values

inputs = inputs.reshape(-1,1)

inputs  = scaler.transform(inputs)

#取最终的测试集

X_test = []

for i in range(60,inputs.shape[0]):

X_test.append(inputs[i-60:i,0])

X_test = np.array(X_test)

#调整矩阵的规模

X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1))

#模型预测

closing_price = model.predict(X_test)

closing_price = scaler.inverse_transform(closing_price)

#计算rms

rms=np.sqrt(np.mean(np.power((valid-closing_price),2)))

rms

11.772259608962642

#for plotting 绘画结果

train = new_data[:987]

valid = new_data[987:]

valid[‘Predictions‘] = closing_price

plt.plot(train[‘Close‘])

plt.plot(valid[[‘Close‘,‘Predictions‘]])

推论

LSTM轻松地超越了我们目前看到的任何算法。

LSTM模型可以对各种参数进行调优,如改变LSTM层数、增加dropout值或增加训练迭代轮数(epoch)数。

但LSTM的预测是否足以确定股票价格将上涨还是下跌?当然不行!

正如我在文章开头提到的,股价受到公司新闻和其他因素的影响,如公司的非货币化或合并/分拆。还有一些无形的因素往往是无法事先预测的。

参考:https://www.jiqizhixin.com/articles/2019-01-04-16

原文地址:https://www.cnblogs.com/xingnie/p/12232237.html

时间: 2024-10-28 09:27:59

如何预测股票分析--长短期记忆网络(LSTM)的相关文章

Keras入门——(6)长短期记忆网络LSTM(三)

参考: https://blog.csdn.net/u012735708/article/details/82769711 https://zybuluo.com/hanbingtao/note/581764 http://blog.sina.com.cn/s/blog_afc8730e0102xup1.html https://blog.csdn.net/qq_30638831/article/details/80060045 执行代码: import pandas as pd from da

【DL-4】长短期记忆网络(LSTM)

目录 背景 从RNN到LSTM LSTM 的核心思想 LSTM前向传播算法 LSTM 的变体 一.背景 由于RNN梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN的机构做了改进,得到了RNN的特例长短期记忆网络LSTM(Long Short-Term Memory)和其它变形,可以从结构上避免常规RNN的梯度消失. 举个例子:长期依赖(Long-Term Dependencies)问题 假设我们试着去预测"I grew up in France... I speak fluent Fre

如何预测股票分析--移动平均

近年来,随着全球经济与股市的快速发展,股票投资成为人们最常用的理财方式之一.本文研究的主要目标是利用机器学习技术,应用Python编程语言构建股票预测模型,对我国股票市场进行分析与预测. 今天主要来回顾的是 移动平均 参考机器之心的文章,对代码进行了中文的解释,同时加入了自己的见解 首先来处理一下数据,选用的是来自塔塔饮料的数据集,获取数据的方式可以查看 传送门 #import packages 导入pandas.numpy库 import pandas as pd import numpy a

如何预测股票分析--线性回归

继续上一篇,接下来是股票分析中使用线性回归 在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系.由X可以部分地决定Y的值,但这种决定往往不很确切.常常用来说明这种依赖关系的最简单.直观的例子是体重与身高,用Y表示他的体重.众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y.又如,城市生活用电量Y与气温X有很大的关系.在夏天气温很高或冬天气温很低时,由于室内空调.冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少.但我们不能由气温X

如何预测股票分析--先知(Prophet)

在上一篇中,我们探讨了自动ARIMA,但是好像表现的还是不够完善,接下来看看先知的力量! 先知(Prophet) 有许多时间序列技术可以用在股票预测数据集上,但是大多数技术在拟合模型之前需要大量的数据预处理.Prophet(先知)由Facebook设计和开发,是一个时间序列预测库,不需要数据预处理,并且非常容易实现.先知的输入是一个带有两列的数据框:日期和目标(ds和y). 时间序列预测一直是预测问题中的难点,人们很难找到一个适用场景丰富的通用模型,这是因为现实中每个预测问题的背景知识,例如数据

如何预测股票分析--k-近邻

在上一篇中,我们学习了线性回归,这一次来看看k近邻的表现 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别. #importing libraries #导入相对应的库函数(第一个是用来使用k n n的,第二个是用来网格搜索,第三个用来归一化) from sklearn import neigh

如何预测股票分析--自动ARIMA

在上一篇中,我们发现knn和线性回归一样,表现的不是特别好,来看看时间序列的表现 时间序列预测法其实是一种回归预测方法,属于定量预测,其基本原理是;一方面承认事物发展的延续性,运用过去时间序列的数据进行统计分析,推测出事物的发展趋势:另一方面充分考虑到偶然因素影响而产生的随机性,为了消除随机波动的影响,利用历史数据进行统计分析,并对数据进行适当处理,进行趋势预测. 自动ARIMA ARIMA是一种非常流行的时间序列预测统计方法.ARIMA模型使用过去的值来预测未来的值.ARIMA中有三个重要参数

深度神经网络在量化交易里的应用 之二 -- 用深度网络(LSTM)预测5日收盘价格

    距离上一篇文章,正好两个星期. 这边文章9月15日 16:30 开始写. 可能几个小时后就写完了.用一句粗俗的话说, "当你怀孕的时候,别人都知道你怀孕了, 但不知道你被日了多少回 " ,纪念这两周的熬夜,熬夜.  因为某些原因,文章发布的有点仓促,本来应该再整理实验和代码比较合适.文章都是两个主要作用: 对自己的工作总结, 方便自己回顾和分享给有兴趣的朋友. 不说废话了, 进入正题. 本次的课题很简单, 深度神经网络(AI)来预测5日和22日后的走势. (22日尚未整理, 不

实测 《Tensorflow实例:利用LSTM预测股票每日最高价(二)》的结果

近期股市行情牛转熊,大盘一直下探!由3200跌到了2700,想必很多人被深套了.这时想起人工智能能否预测股市趋势?RNN能否起作用? 这时便从网上找下教程,发现网上有个例子,便拿来一试!Tensorflow实例:利用LSTM预测股票每日最高价(二) 这个实例大体上没有大问题,只是有些小细节有问题!要想直接复制运行,是会报错的.首先整下代码过程原作者已经写得很清楚了,但对于初学者来讲,有些地方还是不太明白的.我作为一个初学者,先来谈谈我在整个实测中的收获吧! 实例的思路:通过tushare可以获取