1.本文是一篇LSTM处理时间序列的案例

我们先来看看数据集,这里包含了一只股票的开盘价,最高价,最低价,收盘价,交易量的信息。
本文基于LSTM对收盘价(close)进行预测

2. 单维对单步的预测

我们这是用前n天的数据预测第n+1天的数据。
单维单步的蛤含义如下图,利用2天的数据预测第三天的数据。
trainX的形状为(5,2),trainY的形状为(5,1)

3.导入所需要的数据

#关于lstm对时间序列数据的预测
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
from tensorflow.keras import layers,Input,optimizers
#导入数据
data=pd.read_csv(r'C:\Users\Administrator\Desktop\lstm_data\zgpa_train.csv')#读取csv文件
df=pd.DataFrame(data,columns=['date','close'])#只取日期和收盘价两列
print(df.head)

数据如下:

图像如下:

4.数据标准化

这里我们采用标准化。这里会是一个二维的数组。

st=StandardScaler()
dataset_st=st.fit_transform(dataset.reshape(-1,1))
print("标准化",dataset_st)

生成数据如下:

5.创建时间序列的函数

lookback的含义是指你用前几天的数据来预测下一天的数据,例如lookback=2,则是用前2天的数据来预测第三天的数据。

def data_set(dataset,lookback):#创建时间序列数据样本dataX,dataY=[],[]#初始化训练集和测试集的列表for i in range(len(dataset)-lookback-1):a=dataset[i:(i+lookback)]dataX.append(a)dataY.append(dataset[i+lookback])return np.array(dataX),np.array(dataY)#转化为数组输出

6.划分测试集和测试集

\#划分训练集和测试集
train_size=int(len(dataset_st)*0.7)#百分之70训练集
test_size=len(dataset_st)-train_size#剩下的30的训练集
train,test=dataset_st[0:train_size],dataset_st[train_size:len(dataset_st)]#根据数量划分数据集
print(len(train))
print(len(test))

7.调用函数将数据集生成时间序列数据集

这里你可以设置lookback的大小1,2,3…

#根据划分的训练集测试集生成需要的时间序列样本数据
lookback=1
trainX,trainY=data_set(train,lookback)
testX,testY=data_set(test,lookback)
print('trianX:',trainX.shape,trainY.shape)
print(trainX)

8.建立LSTM的模型

这里我需要说明一下,我这里采用的是函数式构造流程,采用了2层lstm,1层全连接,1层dropout,最后连接了1层全连接预测。
LSTM的输入应该是 [samples, timesteps, features],我们采用Input函数最为数据输入的第一层,该函数将样本数据的维度作为大小,比如数据为(509,1,1)这里指含有509个样本数据,大小为1x1维,则input输入的参数即为1,1

#构建lstm模型,这里其实有个bug,可能是由于numpy的问题,这里的trainX是三维的(509,1,1),input不需要将样本数量输入,只需输入样本的维度(1,1)
input_shape=Input(shape=(trainX.shape[1],trainX.shape[2]))
lstm1=layers.LSTM(32,return_sequences=1)(input_shape)
print("lstm1:",lstm1.shape)
lstm2=layers.LSTM(64,return_sequences=0)(lstm1)
print("lstm2:",lstm2.shape)
dense1=layers.Dense(64,activation="relu")(lstm2)
print("dense:",dense1.shape)
dropout=layers.Dropout(rate=0.2)(dense1)
print("dropout:",dropout.shape)
ouput_shape=layers.Dense(1,activation="relu")(dropout)
lstm_model=tf.keras.Model(input_shape,ouput_shape)
lstm_model.compile(loss="mean_squared_error",optimizer="Adam",metrics=["mse"])#mse作为l损失函数,采用Adam作为寻优方式
history=lstm_model.fit(trainX,trainY,batch_size=32,epochs=10,validation_split=0.1,verbose=1)
lstm_model.summary()

9.做出预测,并进行反归一化,画出图像。

#预测测试集
predict_trainY=lstm_model.predict(trainX)
predict_testY=lstm_model.predict(testX)
#反标准化
#trainY=st.inverse_transform(predict_trainY)
testY_real=st.inverse_transform(testY)
testY_predict=st.inverse_transform(predict_testY)
#看一看数据形状
print("Y:",testY_predict,testY_predict.shape)
print("Y_real:",testY_real,testY_real.shape)
plt.figure(figsize=(12,8))
plt.plot(testY_predict,"b",label="预测值")
plt.plot(testY_real,"r",label="真实值")
plt.legend()
plt.show()

结果如下:其实会有一个问题,即预测滞后问题,可能是由于数据稳定性不够,后面做实验应该参考一些论文的解决方法。

更新于2022年02月18日:有很多同学反应一段一段看不懂,这里我就附上全部代码.

#关于lstm对时间序列数据的预测
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
from tensorflow.keras import layers,Input,optimizers
#导入数据
pd.set_option('display.unicode.east_asian_width',True)
data=pd.read_csv(r'C:\Users\Administrator\Desktop\lstm_data\zgpa_train.csv')
df=pd.DataFrame(data,columns=['date','close'])
print(df.head)
#单维单步(用前(1,2,3,......)步预测后1步)
#创建数据集
dataset=df["close"].values
print(type(dataset))
# lookback=1
# print(len(dataset))
def data_set(dataset,lookback):#创建时间序列数据样本dataX,dataY=[],[]for i in range(len(dataset)-lookback-1):a=dataset[i:(i+lookback)]dataX.append(a)dataY.append(dataset[i+lookback])return np.array(dataX),np.array(dataY)plt.figure(figsize=(12, 8))
x=df["date"]
y=df["close"]
plt.plot(x,y)
plt.show()st = StandardScaler()
dataset_st = st.fit_transform(dataset.reshape(-1, 1))
print("标准化", dataset_st)
#数据标准化#划分训练集和测试集
train_size=int(len(dataset_st)*0.7)
test_size=len(dataset_st)-train_size
train,test=dataset_st[0:train_size],dataset_st[train_size:len(dataset_st)]
print(len(train))
print(len(test))#根据划分的训练集测试集生成需要的时间序列样本数据
lookback=1
trainX,trainY=data_set(train,lookback)
testX,testY=data_set(test,lookback)
print('trianX:',trainX.shape,trainY.shape)
print(trainX)#构建lstm模型
input_shape=Input(shape=(trainX.shape[1],trainX.shape[2]))
lstm1=layers.LSTM(32,return_sequences=1)(input_shape)
print("lstm1:",lstm1.shape)
lstm2=layers.LSTM(64,return_sequences=0)(lstm1)
print("lstm2:",lstm2.shape)
dense1=layers.Dense(64,activation="relu")(lstm2)
print("dense:",dense1.shape)
dropout=layers.Dropout(rate=0.2)(dense1)
print("dropout:",dropout.shape)
ouput_shape=layers.Dense(1,activation="relu")(dropout)
lstm_model=tf.keras.Model(input_shape,ouput_shape)
lstm_model.compile(loss="mean_squared_error",optimizer="Adam",metrics=["mse"])
history=lstm_model.fit(trainX,trainY,batch_size=16,epochs=10,validation_split=0.1,verbose=1)lstm_model.summary()#预测测试集
predict_trainY=lstm_model.predict(trainX)
predict_testY=lstm_model.predict(testX)
#反标准化
#trainY=st.inverse_transform(predict_trainY)
testY_real=st.inverse_transform(testY)
testY_predict=st.inverse_transform(predict_testY)
print("Y:",testY_predict,testY_predict.shape)
print("Y222:",testY_real,testY_real.shape)
plt.figure(figsize=(12,8))
plt.plot(testY_predict,"b",label="预测值")
plt.plot(testY_real,"r",label="真实值")
plt.legend()
plt.show()

python深度学习之基于LSTM时间序列的股票价格预测相关推荐

  1. python时间序列分析航空旅人_Python深度学习教程:LSTM时间序列预测小练习—国航乘客数量预测...

    Python深度学习教程:LSTM时间序列预测小练习-国航乘客数量预测 参考数据: 数据一共两列,左边是日期,右边是乘客数量 对数据做可视化:import math import numpy as n ...

  2. Python深度学习:基于TensorFlow

    作者:吴茂贵,王冬,李涛,杨本法 出版社:机械工业出版社 品牌:机工出版 出版时间:2018-10-01 Python深度学习:基于TensorFlow

  3. Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]

    作者:吴茂贵,郁明敏,杨本法,李涛,张粤磊 著 出版社:机械工业出版社 品牌:机工出版 出版时间:2019-11-01 Python深度学习:基于PyTorch [Deep Learning with ...

  4. 基于深度学习lstm_基于LSTM的深度恶意软件分析

    基于深度学习lstm Malware development has seen diversity in terms of architecture and features. This advanc ...

  5. Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类)

    Python深度学习实例--基于卷积神经网络的小型数据处理(猫狗分类) 1.卷积神经网络 1.1卷积神经网络简介 1.2卷积运算 1.3 深度学习与小数据问题的相关性 2.下载数据 2.1下载原始数据 ...

  6. 《Python 深度学习》刷书笔记 Chapter 3 预测房价:回归问题

    文章目录 波士顿房价数据集 3-24 加载波士顿房价数据 3-25 数据标准化 3-26 模型定义 3-27 K折验证 3-28 训练500轮,保存每折的验证结果 3-29 计算所有轮次茨种的K折验证 ...

  7. python从入门到精通 邮电出版社_《人民邮电出版社Python深度学习入门:基于PYTHON的理论与实现》【价格 目录 书评 正版】_中国图书网...

    译者序 xiii 前言 xv 第 1 章 Python入门 1 1.1 Python是什么 1 1.2 Python的安装 2 1.2.1 Python版本 2 1.2.2 使用的外部库 2 1.2. ...

  8. 基于深度学习lstm_深度学习和基于LSTM的恶意软件分类

    基于深度学习lstm Malware development has seen diversity in terms of architecture and features. This advanc ...

  9. 【Python深度学习】基于Tensorflow2.0构建CNN模型尝试分类音乐类型(一)

    音乐分类 前言 复现代码 MP3转mel CNN模型 训练结果 总结 前言 我在逛github的时候,偶然发现了一个项目:基于深度学习的音乐推荐.[VikramShenoy97].作者是基于CNN做的 ...

最新文章

  1. JavaWeb基础—JSP
  2. 《Greenplum企业应用实战》一2.3 畅游Greenplum
  3. MYSQL5.7 忘记ROOT密码/初始化ROOT密码
  4. 修改Tomcat可支持get传参方式的url长度,get形式
  5. 二十万字C/C++、嵌入式软开面试题全集宝典四
  6. 【uva1380 - 一个调度问题】思路题+树形dp
  7. 3.运算符与表达式,控制流
  8. 2019年中国IT市场趋势热点
  9. 《2018区块链整体架构及应用》(PPT全文)
  10. 帝国理工学院暑期学校 | 大数据与创新主题,郭院士领衔,全球Top10校级证书...
  11. 迅雷游戏盒子下载|迅雷游戏盒子下载
  12. declare-styleable中format详解
  13. java get resttemplate 请求传递数组_Java面试中遇到的坑【4】
  14. java如何查内存泄露_如何排查Java内存泄露
  15. 解决gitlab-ci 自动编译时 fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx
  16. C语言之while循环
  17. 【解析】Token to Token Vision Transformer
  18. 微信为什么使用 SQLite 保存聊天记录
  19. 不同试验设计遗传力的计算方法
  20. Android——在线计算器完整代码

热门文章

  1. 基于Uni-APP多端「h5+小程序+App」高仿抖音小视频|直播|聊天实例
  2. 计蒜客 Emptying the Baltic (BFS+Dijkstra)
  3. android opengl es 圆锥纹理贴图
  4. 菜鸡的反思、历险和flag
  5. 数据结构——判断题错误合集
  6. Hex文件和bin文件以及flash大小关系
  7. set.seed的作用
  8. linux r base core,安装最新版本的R-base
  9. shell简介和脚本执行方式
  10. 2023上海大学计算机考研信息汇总