时间序列预测问题

根据输入与输出数量的关系,时间序列预测文题可大致分为:一对一(即单输入单输出),多对一(多输入单输出),多对多(多输入多输出)。

查验数据

本文面对的任务为多对一,即利用股价的相关数据,预测某股开盘价,以交通银行数据为例,数据源自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多输入时间序列预测之股价预测相关推荐

  1. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战

    深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测大气压( air pressure)+代码实战 长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主 ...

  2. 深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战

    深度学习时间序列预测:LSTM算法构建时间序列单变量模型预测空气质量(PM2.5)+代码实战 # 导入需要的包和函数: from __future__ import print_function im ...

  3. 【时间序列预测】股价预测零售预测

    股价预测.零售时间序列预测 1.什么是时间序列预测 时间序列(time series)是一组按照时间发生先后顺序进行排列的数据 时间序列(time series forecaing,简称时序预测.预估 ...

  4. 基于Informer的股价预测(量化交易综述)

    摘要 股票市场是金融市场中不可或缺的组成部分.准确预测股票趋势对于投资者和市场参与者具有重要意义,因为它们可以指导投资决策.优化投资组合以及降低金融风险.而且可以提升国家国际地位以及金融风险控制能力, ...

  5. MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测

    MATLAB-基于长短期记忆网络(LSTM)的SP500的股票价格预测 股价预测 matlab实战 数据分析 数据可视化 时序数据预测 变种RNN 股票预测 摘要 近些年,随着计算机技术的不断发展,神 ...

  6. 深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM(Long Short Term Memory Network)长短时记忆网络,是一种改进之后的循环神经网 ...

  7. 深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:Encoder-Decoder LSTM算法构建时间序列多变量模型预测交通流量+代码实战 LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要 ...

  8. 使用 LSTM 进行多变量时间序列预测的保姆级教程

    来源:DeepHub IMBA 本文约3800字,建议阅读10分钟本文中我们将使用深度学习方法 (LSTM) 执行多元时间序列预测. 使用 LSTM 进行端到端时间序列预测的完整代码和详细解释. 我们 ...

  9. python 神经网络预测未来30天数据_使用LSTM循环神经网络的时间序列预测实例:预测未来的货币汇率...

    Statsbot团队发表过一篇关于使用时间序列分析来进行异常检测的文章.文章地址:https://blog.statsbot.co/time-series-anomaly-detection-algo ...

  10. TensorFlow搭建LSTM实现多变量时间序列预测(负荷预测)

    目录 I. 前言 II. 数据处理 III. LSTM模型 IV. 训练/测试 V. 源码及数据 I. 前言 在前面的一篇文章TensorFlow搭建LSTM实现时间序列预测(负荷预测)中,我们利用L ...

最新文章

  1. English Spoken Math
  2. LUA学习之路--初识LUA
  3. x64dbg 修改为dll_c++笔记(dll 注入的实现)
  4. 看清条款,小心网通陷阱
  5. 周志华眼中的贝叶斯方法(转)
  6. Go gin web框架介绍
  7. Web browser的发展演变
  8. Jenkins自动部署SpringCloud项目
  9. 前端elementui el-popover 多行文本换行显示优化
  10. 367.有效的完全平方数
  11. HTML5期末大作业:动漫网站设计——千与千寻(10页) 含设计报告 HTML+CSS+JavaScript 学生动漫网页设计模板下载 海贼王大学生HTML网页制作作品
  12. 今日头条技术架构分析
  13. 计算机不打印怎么回事,打印机无法打印怎么办解决方案
  14. php5.2 zend解密,狐灵科技分享几款zend解密工具,可以解密zend5.2
  15. 董文永武汉大学计算机学院,董文永
  16. grep -v xxx 用法
  17. 冲激响应(impulse response)
  18. 怎么查看自己微信支付宝绑定银行卡号
  19. 中微子探测地幔放射性生热
  20. Logback - SiftingAppender

热门文章

  1. ie浏览器调用本地文件无反应_四种办法教你IE浏览器点击没反应,启动不了如何解决--系统之家...
  2. 你真的不了解我的痛楚,请不要瞎说
  3. 程序员真的需要读研究生么?
  4. linux中运行屏幕分辨率,Linux设置显示器分辨率与刷新率
  5. python-函数参数和文档
  6. Arcgis进行人口密度计算
  7. 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
  8. gdrive无限网盘挂载systemd文件
  9. 程序员自我修改之读书学习
  10. 服务器连接无线键盘,【罗技 K375s 无线蓝牙键盘使用总结】连接|手感_摘要频道_什么值得买...