本期作者:Derrick Mwiti

本期翻译:HUDPinkPig

未经授权,严禁转载

编者按:本文介绍了如何使用LSTM模型进行时间序列预测。股票市场的数据由于格式规整和非常容易获得,是作为研究的很好选择。但不要把本文的结论当作理财或交易建议。

本文将通过构建用Python编写的深度学习模型来预测未来股价走势。

虽然预测股票的实际价格非常难,但我们可以建立模型来预测股票价格是上涨还是下跌。本文使用的数据可以在https://github.com/mwitiderrick/stockprice下载。另外,本文将不考虑诸如政治氛围和市场环境等因素对股价的影响。。

介绍

LSTM在解决序列预测的问题时非常强大,因为它们能够存储之前的信息。而之前的股价对于预测股价未来走势时很重要。

本文将通过导入NumPy库来进行科学计算、导入Matplotlib库来绘制图形、以及导入Pandas库来加载和操作数据集。

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

加载数据集

模型选择开盘价(Open)和最高价(High)两列。我们查看数据集的表头,可以大致了解数据集的类型。

dataset_train = pd.read_csv('NSE-TATAGLOBAL.csv')

training_set = dataset_train.iloc[:, 1:2].values

Open列是股票交易的开盘价,Close列是收盘价,High列是最高价,Low列是最低价。

特征归一化

从以前使用深度学习模型的经验来看,我们需要进行数据归一化以获得最佳的测试表现。本文的例子中,我们将使用Scikit- Learn的MinMaxScaler函数将数据集归一到0到1之间。

from sklearn.preprocessing import MinMaxScaler

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

training_set_scaled = sc.fit_transform(training_set)

按步长创建数据

LSTM要求数据有特殊格式,通常是3D数组格式。初始按照60的步长创建数据,并通过Numpy转化到数组中。然后,把 X_train的数据转化到3D维度的数组中,时间步长设置为60,每一步表示一个特征。

X_train = []

y_train = []

for i in range(60, 2035):

X_train.append(training_set_scaled[i-60:i, 0])

y_train.append(training_set_scaled[i, 0])

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))

构建LSTM

我们需要导入Keras的一些模型来构建LSTM

1、顺序初始化神经网络

2、添加一个紧密连接的神经网络层

3、添加长短时记忆层(LSTM)

4、添加dropout层防止过拟合

from keras.models import Sequential

from keras.layers import Dense

from keras.layers import LSTM

from keras.layers import Dropout

为了防止过拟合,我们添加了LSTM层和Dropout层,其中LSTM层的参数如下:

1、50 units 表示输出空间是50维度的单位

2、return_sequences=True 表示是返回输出序列中的最后一个输出,还是返回完整序列

3、input_shape 训练集的大小

在定义Dropout层时,我们指定参数为0.2,意味着将删除20%的层。然后,我们指定1个单元的输出作为全连接层(Dense layer)。接着,我们使用目前流行的adam优化器编译模型,并用均方误差(mean_squarred_error)来计算误差。最后,模型运行100epoch,设置batch大小为32。这个参数是根据电脑的配置来设定的,并且将耗费几分钟时间来完成实验。

regressor = Sequential()

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

regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))

regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))

regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))

regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)

在测试集上预测股价

先导入我们要做股价预测的测试集:

dataset_test = pd.read_csv('tatatest.csv')

real_stock_price = dataset_test.iloc[:, 1:2].values

为了预测未来的股票价格,我们需要在测试集加载后做如下几个工作:

1、在0轴上合并训练集和测试集

2、将时间步长设置为60(如前面所介绍的)

3、使用MinMaxScaler函数转换新数据集

4、按照前面所做的那样重新规整数据集

在做出预测之后,我们用inverse_transform函数处理,以返回正常可读格式的股票价格。

dataset_total = pd.concat((dataset_train['Open'], dataset_test['Open']), axis = 0)

inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].values

inputs = inputs.reshape(-1,1)

inputs = sc.transform(inputs)

X_test = []

for i in range(60, 76):

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))

predicted_stock_price = regressor.predict(X_test)

predicted_stock_price = sc.inverse_transform(predicted_stock_price)

展示结果

最后,我们用Matplotlib库可视化显示真实股价和预测股价的对比。

plt.plot(real_stock_price, color = 'black', label = 'TATA Stock Price')

plt.plot(predicted_stock_price, color = 'green', label = 'Predicted TATA Stock Price')

plt.title('TATA Stock Price Prediction')

plt.xlabel('Time')

plt.ylabel('TATA Stock Price')

plt.legend()

plt.show()

从图中我们可以看到,股票实际价格出现上涨时,模型也预测股价会上涨,较为吻合。这清晰地显示了LSTMs在分析时间序列和序列数据等方面的强大作用。

结论

预测股价的方法还有很多,比如移动平均线、线性回归、k近邻、ARIMA和Prophet。读者可以自行测试这些方法的准确率,并与Keras LSTM的测试结果进行比较。

推荐阅读

公众号官方QQ群

每天很多干货分享

没有按规则加群者一律忽略

python预测股票 keras_使用LSTM模型预测股价基于Keras相关推荐

  1. bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras

    一.问题背景     现实生活中,在一系列时间点上观测数据是司空见惯的活动,在农业.商业.气象军事和医疗等研究领域都包含大量的时间序列数据.时间序列的预测指的是基于序列的历史数据,以及可能对结果产生影 ...

  2. 时间序列预测股票数据—以LSTM模型为例

    一.对时间序列的理解: 时间序列是按照一定时间间隔排列的数据,时间间隔可以是任意时间单位,通过对时间序列的分析,我们可以探寻到其中的现象以及变化规律,并将这些信息用于预测.这就需要一系列的模型,用于将 ...

  3. 【金融】【pytorch】使用深度学习预测期货收盘价涨跌——LSTM模型构建与训练

    [金融][pytorch]使用深度学习预测期货收盘价涨跌--LSTM模型构建与训练 LSTM 创建模型 模型训练 查看指标 LSTM 创建模型 指标函数参考<如何用keras/tf/pytorc ...

  4. 时间序列预测(四)—— LSTM模型

    时间序列预测(四)-- LSTM模型 欢迎大家来我的个人博客网站观看原文:https://xkw168.github.io/2019/05/20/时间序列预测-四-LSTM模型.html 文章链接 ( ...

  5. baostock证券数据集下使用LSTM模型预测A股走势

    baostock证券数据集下使用LSTM模型预测A股走势 作者信息:edencfc 更新日期:2022 年 11 月 10 日 摘要: 本示例将会演示如何使用飞桨完成多变量输入的时序数据预测任务.这个 ...

  6. 时序预测 | python实现仿生算法优化LSTM时间序列预测(全网最全仿生算法)

    ** 时序预测 | python实现仿生算法优化LSTM时间序列预测(全网最全仿生算法) ** 多变量/单变量预测程序 多变量/单变量预测程序 多变量/单变量预测程序 A ABC-LSTM--人工蜂群 ...

  7. 时间序列深度学习:状态 LSTM 模型预测太阳黑子

    目录 时间序列深度学习:状态 LSTM 模型预测太阳黑子 教程概览 商业应用 长短期记忆(LSTM)模型 太阳黑子数据集 构建 LSTM 模型预测太阳黑子 1 若干相关包 2 数据 3 探索性数据分析 ...

  8. 如何用Python对股票数据进行LSTM神经网络和XGboost机器学习预测分析(附源码和详细步骤),学会的小伙伴们说不定就成为炒股专家一夜暴富了

    前言 最近调研了一下我做的项目受欢迎程度,大数据分析方向竟然排第一,尤其是这两年受疫情影响,大家都非常担心自家公司裁员或倒闭,都想着有没有其他副业搞搞或者炒炒股.投资点理财产品,未雨绸缪,所以不少小伙 ...

  9. python应用(3)svm模型预测股票涨跌

    最近接了一个私活,指导学妹完成毕业设计.核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置. 在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖 ...

最新文章

  1. 菜菜从零学习WCF十(序列化)
  2. Web 2.0背后的长尾理论
  3. 导入Java文件还是class文件_java程序运行的时候,是把所有的class文件都加载到内存吗?还是用的什么加载什么?...
  4. Quartz-Trigger详解
  5. PHP stripos strpos,strpos()和stripos()函数的区别
  6. mac定时执行python_Python脚本实现在Mac上DIY定时提醒功能
  7. 一句话征服了美国人,这位饱受争议的数学博士竟从未上过学?
  8. 查看数据库 MySQL 的版本信息的命令语句
  9. matlab var求方差
  10. java spring mvc api_SpringMVC实现REST API
  11. Web Map Gis 开发系列索引
  12. apt mysql 5.1_linux下apt安装mysql导致mysql.user table is damaged
  13. 对POSIX和SystemV消息队列优化:用户态消息队列
  14. 什么是通配符SSL证书?
  15. Java 求解买卖股票的xx时机含手续费
  16. AHU 数据结构 最短路径 安大地图版本
  17. 小知识:peg改性(PEG-Ara-C阿糖胞苷/Scu灯盏乙素/Flud氟达拉滨)后的新变化
  18. 论文解读:A content-based recommender system for computer science publications
  19. Codeforces Problem-1593A Elections
  20. 【计算题】(三)连续与导数

热门文章

  1. 第一不完全性定理证明标号分类 拆解汉译 知识背景——哥德尔原著英译拆解汉译之一
  2. FFmpeg 音视频转封装(MP4与FLV互转,流数据转FLV、MP4)
  3. 什么是绿色工厂?什么企业可以申报绿色工厂?
  4. 2011年10月买到Incredible S G11山寨,大家警惕!
  5. 卓有成效的管理者——第5章 要事优先
  6. 解决用联通看不了B站等问题
  7. PC微信3.3.0内测版(新增朋友圈功能)
  8. 我们进入微服务世界的旅程-以及我们从中学到的东西。
  9. 生产者和消费者问题-----管程法
  10. 水仙花数(调用函数)