深度学习实战-使用LSTM预测股票走势

一个很有意思的实例:预测股票走势。希望新的一年大家都能发大财!

长短期记忆网络(LSTM,Long Short-Term Memory)是一种专门用来处理时间序列的神经网络结构。LSTM的出现是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的。

图片

我们以股票走势预测为例,输出为某个股票的今日收盘价格,输入为这个股票以往60个交易日的价格。

一、需要使用到的python包import numpy as np

import pandas as pd# 使用kears包快速搭建LSTM神经网络import kears# tushare股票数据提供平台import tushare as ts

二、获取股票数据

需要在 tushare官网申请账号,然后使用token才能通过数据接口获取数据ts.set_token('xxx') pro = ts.pro_api()#这里是用 000002 万科为例,下载2015-1-1 的股价数据df = pro.daily(ts_code=‘000002.SZ’, start_date='2015-01-01’, end_date=‘2020-02-25’)

我们在Pycharm中运行上述代码,并打印出结果如下:

图片

三、股票数据预处理

 使用最大最小算法将股票数据标准化为0到1之间的数据from sklearn.preprocessing import MinMaxScaler
mms = MinMaxScaler(feature_range = (0, 1))
train_set = mms.fit_transform(df.values)
# 准备大量的 X 和 y,用于后面的训练。X_train = []y_train = []for i in range(60, len(train_set )):X_train.append(train_set [i-60:i])y_train.append(train_set [i, train_set .shape[1] - 1])X_train, y_train = np.array(X_train), np.array(y_train)

四、创建LSTM神经网络

from keras.models import Sequentialfrom keras.layers import LSTM, Denseimport numpy as np
def cre_lstm(x_train):    model = Sequential()    model.add(LSTM(16, input_shape=(x_train.shape[1], x_train.shape[2])))    model.add(Dense(1))    model.compile(loss='mae', optimizer='adam')    model.summary()    return model

五、训练LSTM神经网络并保存

model = cre_lstm(x_train)LSTM_model = model.fit(x_train, y_train, epochs=300, batch_size=100,                       validation_split=0.1, verbose=1, shuffle=False)model.save("./model/LSTM_model")

六、预测未来的股票价格

#准备测试数据X_test = []for i in range(60, 60 + len(dataset_test)):X_test.append(inputs[i-60:i])X_test = np.array(X_test)#对预测数据也做一次数组变形处理X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], dataset_test.shape[1]))#用前面训练的模型预测价格predicted_price = model.predict(X_test)#再把规则化数据转回成正常的价格数据,现在就可以得出预测的下个交易日收盘价格predicted_price = mms.inverse_transform(predicted_stock_price)

图片

结论:曲线拟合还不错,但是有一个很严峻的问题:为什么我还没脱贫呢???

为什么不能用LSTM模型来预测股票?有一篇文章进行了说明:Machine Learning in Finance: Why You Should Not Use LSTM’s to Predict the Stock Market。结论是:从总体上看,LSTM似乎在预测第二天价格这方面是有效的,实际上,第二天的预测与前一天的实际价格非常接近

按照文章的结论,将前一天的lable和后一天的预测进行拟合:

图片

这张经过平移之后的图,虽然在数值上有差异,最大值和最小值都能对上。这说明,LSTM仅仅用一个非常接近前一天收盘价的数值作为第二天的预测值。这意味着它在股票的时间序列预测问题上是一个没有预测能力的模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值