最近研究了一下用深度学习算法来预测股票未来的走势,看了网上不少别人分享的案例,也实际进行了测试,感觉用 LSTM 算法比较适用。长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,
看上面图感觉 LSTM 很深奥,其实简单理解是把过往基于时间序列的数据集跟预测目标数据做规律探索,LSTM 会结合比较久以前的数据(long)和最近的数据(short-term)做出综合判断,发现内在规律,形成预测模型。
拿预测股票价格为例,我们可以把某只股票今天的收盘价作为预测目标,昨天开始一直往前 60 个交易日的收盘价格作为输入数据,也就是把前面 60 个收盘价作为机器学习的 X 输入,今天的收盘价是 y 输出。按这样的规律依次往前准备 X 和 y 数据,例如昨天的收盘价是一个新的 y,昨天之前 60 个交易日的收盘价作为一个新的 X。根据你能收集到的价格数据,可以准备出大量的 X 和 y,作为训练 LSTM 算法的数据。
下面结合程序做详细解释。
1.引入需要的包
1 | import numpy as np |
2.下载股票数据
1 | ts.set_token('xxx') #需要在 tushare 官网申请一个账号,然后得到 token 后才能通过数据接口获取数据 |
3.做数据准备
1 | #把数据按时间调转顺序,最新的放后面,从 tushare 下载的数据是最新的在前面,为了后面准备 X,y 数据方便 |
4.创建 LSTM 模型并训练
1 | #这里是使用 Keras,Keras 大大简化了模型创建工作,背后的真正算法实现是用 TensorFlow 或其他。 |
整个训练过程需要持续一段时间,根据数据量的大小需要的训练时间也不同,界面输出大致如下:
5.预测未来的价格
我们先获取用于预测的数据,比如拿到今天的收盘价后,再跟前面 59 个交易日的收盘价组成一个 X,然后用上面训练出来的模型进行预测 y 值,这个 y 值就是明天的预测股票价格。
1 | import tushare as ts |
如果把上面的预测过程再循环往未来做几次(把预测出来的下个交易日数据作为新的输入去预测再下一个交易日价格),可以预测出未来几天的股票价格,下面图可以示意出来。