LSTM多输入时间序列预测之股价预测
时间序列预测问题
根据输入与输出数量的关系,时间序列预测文题可大致分为:一对一(即单输入单输出),多对一(多输入单输出),多对多(多输入多输出)。
查验数据
本文面对的任务为多对一,即利用股价的相关数据,预测某股开盘价,以交通银行数据为例,数据源自tushare:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tushare as tsts.set_token('my token')#个人序列号
pro = ts.pro_api()
data = pro.daily(ts_code='601328.SH')
data
如下
前两列无用,舍弃。查看数据趋势:
cols = list(data1.columns)
fig = plt.figure(figsize=(16,6))
for i in range(len(cols)):ax = fig.add_subplot(2,5,i+1)ax.plot(data1.iloc[:,i])ax.set_title(cols[i])
显示各列趋势为
改造数据
接下来改造数据,利用一段时间的数据预测下一时间的值,时间窗口自拟,需要保持一个恰当的长度,本文选择10个点。由于目标为开盘价(open),故第一列为目标,其余列为特征。设计改造函数如下:
def load_data_list_head(data, n_prev = 10): docX, docY = [], []for i in range(len(data)-n_prev):docX.append(data[i:i+n_prev,1:])docY.append(data[i+n_prev,0])return np.array(docX), np.array(docY)
为取得较为理想结果,对数据进行归一化,注意量纲差异巨大,所以考虑分开做归一化:
import sklearn
from sklearn.preprocessing import MinMaxScaler as MMS
data = data1.valuesscaler_price = MMS(feature_range=(0,1)).fit(data[:,:-4])
scaler_change = MMS(feature_range=(0,1)).fit(data[:,-4].reshape(-1,1))
scaler_pct_change = MMS(feature_range=(0,1)).fit(data[:,-3].reshape(-1,1))
scaler_vol_amount = MMS(feature_range=(0,1)).fit(data[:,-2:])data_price = scaler_price.transform(data[:,:-4])
data_change = scaler_change.transform(data[:,-4].reshape(-1,1))
data_pct_change = scaler_pct_change.transform(data[:,-3].reshape(-1,1))
data_vol_amount = scaler_vol_amount.transform(data[:,-2:])
指定缩放器scaler后留存,用于生成预测值后反变换回原始量纲。重新捏合数据,指定目标、特征以及划分训练集和测试集:
feature_data = np.c_[data_price[:,1:],data_change,data_pct_change,data_vol_amount]
target_data = data_price[:,0]
full_data = np.c_[target_data,feature_data]
n_prev = 10#窗口长度10
xx,yy = load_data_list_head(full_data,n_prev)#改造数据
test_size = .25#测试集比例
test_length = round(xx.shape[0]*test_size)#测试集长度
x_train, x_test = xx[:-test_length], xx[-test_length:]
y_train, y_test = yy[:-test_length], yy[-test_length:]
使用TensorFlow中的LSTM
使用tensorflow建模,堆叠模式:
import tensorflow
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dropout, Dense
def build_model():model = Sequential()# 序列堆叠 model.add(# LSTM层LSTM(32,activation='relu',input_shape=(x_train.shape[1],x_train.shape[2]))) model.add(Dense(1))# 全连接层model.summary()# 查看模型return model
model = build_model()
# 损失函数 mse,优化器 adam
model.compile(loss="mse", optimizer="adam")# 编译模型
# 模型训练
history = model.fit(x_train,y_train,batch_size=16,epochs=32,validation_split=0.25
)
查看训练过程MSE变化:
plt.figure(figsize=(8,4))
plt.plot(history.history['loss'],label='train loss')
plt.plot(history.history['val_loss'],label='validation loss')
plt.legend()
在早期就已收敛,查看预测结果:
y_predict = model.predict(x_test)
plt.figure(figsize=(8,4))
plt.plot(y_predict,label='prediction')
plt.plot(y_test,label='original')
plt.legend()
返回原始量纲
差异很小,性质上而言预测成功,但需要返回到原始量纲检验:
inv_y_test = scaler_price.inverse_transform(np.tile(np.r_[y_train,y_test],(5,1)).T)[-y_test.shape[0]:,0]
inv_y_predict = scaler_price.inverse_transform(np.tile(np.r_[y_train,y_predict[:,0]],(5,1)).T)[-y_predict.shape[0]:,0]plt.figure(figsize=(8,4))
plt.plot(inv_y_predict,label='prediction')
plt.plot(inv_y_test,label='original')
plt.title('100 last points')
plt.legend()
查看最后100个点做最后检验:
plt.figure(figsize=(8,4))
plt.plot(inv_y_predict[-100:],label='prediction')
plt.plot(inv_y_test[-100:],label='original')
plt.title('100 last points')
plt.legend()
本文关于窗口长度、训练参数、模型参数等未作细致调整,后续可以依托optuna等框架作进一步优化。仅为实验,慎重参考。
LSTM多输入时间序列预测之股价预测相关推荐
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战
深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主 ...
- 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战
深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战 # 导入需要的包和函数: from __future__ import print_function im ...
- 【时间序列预测】股价预测零售预测
股价预测.零售时间序列预测 1.什么是时间序列预测 时间序列(time series)是一组按照时间发生先后顺序进行排列的数据 时间序列(time series forecaing,简称时序预测.预估 ...
- 基于Informer的股价预测(量化交易综述)
摘要 股票市场是金融市场中不可或缺的组成部分.准确预测股票趋势对于投资者和市场参与者具有重要意义,因为它们可以指导投资决策.优化投资组合以及降低金融风险.而且可以提升国家国际地位以及金融风险控制能力, ...
- MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测
MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...
- 深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战
深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网 ...
- 深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战
深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要 ...
- 使用 LSTM 进行多变量时间序列预测的保姆级教程
来源:DeepHub IMBA 本文约3800字,建议阅读10分钟本文中我们将使用深度学习方法 (LSTM) 执行多元时间序列预测. 使用 LSTM 进行端到端时间序列预测的完整代码和详细解释. 我们 ...
- python 神经网络预测未来30天数据_使用LSTM循环神经网络的时间序列预测实例:预测未来的货币汇率...
Statsbot团队发表过一篇关于使用时间序列分析来进行异常检测的文章.文章地址:https://blog.statsbot.co/time-series-anomaly-detection-algo ...
- TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)
目录 I. 前言 II. 数据处理 III. LSTM模型 IV. 训练/测试 V. 源码及数据 I. 前言 在前面的一篇文章TensorFlow搭建LSTM实现时间序列预测(负荷预测)中,我们利用L ...
最新文章
- English Spoken Math
- LUA学习之路--初识LUA
- x64dbg 修改为dll_c++笔记(dll 注入的实现)
- 看清条款,小心网通陷阱
- 周志华眼中的贝叶斯方法(转)
- Go gin web框架介绍
- Web browser的发展演变
- Jenkins自动部署SpringCloud项目
- 前端elementui el-popover 多行文本换行显示优化
- 367.有效的完全平方数
- HTML5期末大作业:动漫网站设计——千与千寻(10页) 含设计报告 HTML+CSS+JavaScript 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品
- 今日头条技术架构分析
- 计算机不打印怎么回事,打印机无法打印怎么办解决方案
- php5.2 zend解密,狐灵科技分享几款zend解密工具,可以解密zend5.2
- 董文永武汉大学计算机学院,董文永
- grep -v xxx 用法
- 冲激响应(impulse response)
- 怎么查看自己微信支付宝绑定银行卡号
- 中微子探测地幔放射性生热
- Logback - SiftingAppender
热门文章
- ie浏览器调用本地文件无反应_四种办法教你IE浏览器点击没反应,启动不了如何解决--系统之家...
- 你真的不了解我的痛楚,请不要瞎说
- 程序员真的需要读研究生么?
- linux中运行屏幕分辨率,Linux设置显示器分辨率与刷新率
- python-函数参数和文档
- Arcgis进行人口密度计算
- 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
- gdrive无限网盘挂载systemd文件
- 程序员自我修改之读书学习
- 服务器连接无线键盘,【罗技 K375s 无线蓝牙键盘使用总结】连接|手感_摘要频道_什么值得买...