一、对时间序列的理解:

时间序列是按照一定时间间隔排列的数据,时间间隔可以是任意时间单位,通过对时间序列的分析,我们可以探寻到其中的现象以及变化规律,并将这些信息用于预测。这就需要一系列的模型,用于将原始时间序列数据放进模型中进行训练,并用训练好的时间序列模型来预测未知的时间序列。

提供的数据:

“中国平安”2016-2018年股票数据,背景为平安保险集团。数据预览如下:

通过预览数据,可知此次实验的数据属性为date(日期)、open(开盘价)、high(最高价)、low(最低价)、close(收盘价)以及volume(成交量)

其中,我们要实现股票预测,需要着重对close(收盘价)一列进行探索性分析。

二、使用LSTM进行时序预测

模型介绍:

包括遗忘门、输入门、输出门。LSTM将这些卡口作为去除或者增加细胞状态的工具。门是一种让信息选择式通过的方法,他们包含一个sigmoid神经网络层和一个按位的乘法操作。

其中,每一个sigmoid会输出0到1之间的数值,描述每个部分有多少量可以通过。0表示不允许任何量通过,1表示允许任意量通过。

LSTM通过三个门,保护和控制细胞状态。

建模思路(包括数据处理、模型分块、建模、模型优化、检验等)

(1)数据处理:

导入数据,提取数据集的date日期和close收盘价两列,作为建模预测的对象。

模型分块,设置测试集规模以及滑块大小,现将数据归一化处理,转化为tensor可以识别的数据,再将原数据设定为滑块为1,每调用1批次的数据,将其添加到列表,从而实现二维数据转三维数据,再切分训练集、测试集。

建模步骤(依据上述思路进行建模,详细描述过程)

定义网络层:LSTM层(神经元个数:16,激活函数:relu)

全连接层(神经元个数:1,激活函数:relu,正则化:l2范数)

模型实例化并装配网络(优化器:采用自适应梯度优化算法Adam,学习率设定为0.1,损失函数采用交叉熵函数,评价指标采用准确率)

训练模型,设定训练批次为50,每批次样本量为100.

#使用LSTM进行预测
import tensorflow as tf
from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
from tensorflow.keras.layers import Input,Dropout,Dense,LSTM
from tensorflow.keras.models import Model
from tensorflow.keras import regularizers
import tensorflow.keras as keras
np.random.seed(100)
# 选取随机种子个数100个
# 设置神经网络参数
# 提取收盘价
y=stock['close']
print(y)
# 数据预处理
test_ratio=0.4
windows=1
# 设置滑块大小
# 定义测试集规模
# # 通过比例切分
# 测试集大小
from sklearn.preprocessing import MinMaxScaler
data_lsvm=y.valuesscaler=MinMaxScaler(feature_range=(0, 1))
data_lsvm=scaler.fit_transform(data_lsvm.reshape(-1,1))print(data_lsvm)
cut=round(test_ratio* data_lsvm.shape[0])
print(data_lsvm.shape[0])
print('切分:',cut)
train,test=data_lsvm[:data_lsvm.shape[0]-cut,:],data_lsvm[data_lsvm.shape[0]-cut:,:]
amount_of_features=data_lsvm.shape[1]
lstm_input=[]
data_temp=data_lsvm
for i in range(len(data_temp)-windows):lstm_input.append(data_lsvm[i:i+windows,:])
lstm_input=np.array(lstm_input)
lstm_output=y[:-windows]lstm_output=np.array(lstm_output)
x_train,y_train,x_test,y_test=lstm_input[:data_lsvm.shape[0]-cut,:],lstm_output[:data_lsvm.shape[0]-cut],lstm_input[data_lsvm.shape[0]-cut:,:],lstm_output[data_lsvm.shape[0]-cut:]
print(x_train.shape,y_train.shape,x_test.shape,y_test.shape)
x_train
mn_units=16
dropout=0.01
# # 定义网络全连接层
#
def lstm_model():inputs=Input(shape=(windows,amount_of_features))# lstm层rnn = LSTM(units=mn_units, activation='relu',return_sequences=False)(inputs)dense=Dropout(dropout)(rnn)
#     dense1=Dense(16,activation='sigmoid',kernel_regularizer=regularizers.l2(0.1))(dense)
#     dense2=Dense(8,activation='relu',kernel_regularizer=regularizers.l2(0.1))(dense)outputs=Dense(1,activation='relu',kernel_regularizer=regularizers.l2(0.5))(dense)model=Model(inputs=inputs,outputs=outputs)model.compile(optimizer=keras.optimizers.Adam(0.1),loss=tf.losses.BinaryCrossentropy(),metrics=['accuracy'])model.summary()return model
#
batch_size=100
#
epoch=50
# 训练网络
mymodel=lstm_model()
history = mymodel.fit(x_train,y_train,batch_size=batch_size,epochs=epoch)
y_train_predict=mymodel.predict(x_test)

fig= plt.figure(figsize=(8, 5))
plt.plot(history.history['loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

(3)预测结果(数据、拟合图等)

评估结果:

随着训练次数增多,loss值逐渐减小。

将预测后的数据进行评估,并将预测结果反归一化,如图:

# print(mymodel.metrics_names)
loss,acc=mymodel.evaluate(x_test,y_test)
print('评估结果',loss,acc)y_train_predict=mymodel.predict(x_train)#预测结果
y_test_predict=mymodel.predict(x_test)#预测结果
print('预测结果',y_train_predict,y_test_predict)
print(y_test_predict.shape)

#反归一化trainPredict=scaler.inverse_transform(y_train_predict)
testPredict = scaler.inverse_transform(y_test_predict)
data_lsvmx=scaler.inverse_transform(data_lsvm)
# y_test = scaler.inverse_transform(y_test)
print(len(trainPredict),len(testPredict))
data_lsvmx

反归一化后的结果:

# 预测结果testPredict=pd.DataFrame(testPredict)
close_new=testPredict
close_new.columns=['new_close']
stock_new=stock.iloc[:-windows,:]# 训练集预测结果
trainPredict=pd.DataFrame(trainPredict)
train_date=stock_new[:data_lsvm.shape[0]-cut].loc[:,['date']]
new_date_train=train_date.reset_index()new_date_train=new_date_train.drop('index',axis=1)
print(new_date_train)
new_date=stock_new[data_lsvm.shape[0]-cut:].loc[:,['date']]
new_date=new_date.reset_index()
new_date=new_date.drop('index',axis=1)
# date=pd.concat([new_date_train,new_date],axis=0)
new_predict=pd.concat([new_date,close_new],axis=1)

新的预测结果:

作图:

# 构建通过训练集进行预测的图表数据
predict_train_plot = np.empty_like(data_lsvm)
predict_train_plot[:, :] = np.nan
predict_train_plot[:data_lsvm.shape[0]-cut, :] = trainPredict
# 构建通过测试集进行预测的图表数据
predict_test_plot = np.empty_like(data_lsvm)
predict_test_plot[:, :] = np.nan
predict_test_plot[data_lsvmx.shape[0]-cut+1:, :] = testPredict# 原数据
data_plot = np.empty_like(data_lsvmx)
data_plot[:, :] = np.nan
data_plot[:, :] = data_lsvmx# # 构建通过原数据进行拟合的图表数据
date=stock.loc[:,['date']]
type(date["date"])

最后绘制预测图:

fig2 = plt.figure(figsize=(10, 5))
dataset = scaler.inverse_transform(data_lsvm)
plt.plot(date["date"],predict_train_plot, color='green')
plt.plot(date["date"],predict_test_plot, color='red')
plt.plot(date["date"],data_plot, color='blue')
plt.xticks(range(0,730,80))
plt.show()

通过构建训练集进行预测的图表数据和通过测试集进行预测的图表数据,以及原数据的图表数据。

由图可知,该模型预测的价格走势和原数据走势大体吻合。

时间序列预测股票数据—以LSTM模型为例相关推荐

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

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

  2. python预测股票 keras_使用LSTM模型预测股价基于Keras

    本期作者:Derrick Mwiti 本期翻译:HUDPinkPig 未经授权,严禁转载 编者按:本文介绍了如何使用LSTM模型进行时间序列预测.股票市场的数据由于格式规整和非常容易获得,是作为研究的 ...

  3. LSTM 时间序列预测+股票预测案例(Pytorch版)

    文章目录 LSTM 时间序列预测 股票预测案例 数据特征 对收盘价(Close)单特征进行预测 1. 导入数据 2. 将股票数据收盘价(Close)进行可视化展示 3. 特征工程 4. 数据集制作 5 ...

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

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

  5. [时间序列预测]基于BP、LSTM、CNN-LSTM神经网络算法的单特征用电负荷预测[保姆级手把手教学]

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  6. 时间序列预测(二)—— AR模型

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

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

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

  8. 智能运维之时间序列预测中的经典时序模型

    # 技术黑板报 # 第七期 推荐阅读时长:12min 智能运维领域时间序列预测都有哪些典型应用场景?典型的算法有哪些?这些算法在实际落地应用中有哪些优缺点?让我们一起来看看云智慧对此是怎样理解的. 章 ...

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

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

最新文章

  1. P3175 [HAOI2015]按位或(Min - Max容斥,FMT,概率期望,全网最清晰的题解!)
  2. Delphi 原生ADO(二)
  3. 一篇文章教你弄懂 SpringMvc中的HandlerInterceptor
  4. eclipse 中 安装git 插件和使用git 插件
  5. 20应用统计考研复试要点(part14)--应用多元分析
  6. r语言岭回归参数选择_数据分析中常见的七种回归分析以及R语言实现(三)---岭回归...
  7. 如何在合并复制中改变表结构?
  8. 查生日代码_让库克亲自送上生日祝福的10后小学生,还在B站教人学编程?
  9. java 表格树_00030-layui+java 树形表格treeTable
  10. WMware Mac 一些优化
  11. 软件自动化测试脚本如何写,(最新整理)自动化测试脚本编写规范
  12. ipv6的linux安装
  13. HDLCPPP原理与配置
  14. Terraria(泰拉瑞亚)存档覆盖(Linux)
  15. Referring Image Segmentation 综述
  16. vue 在线阅读PDF
  17. 我们怎样才能过好这一生?
  18. 5 打印选课学生名单 (25 分)
  19. 笔记-中项/高项学习期间的错题笔记1
  20. pytorch-->optimizer.zero_grad()、loss.backward()、optimizer.step()和scheduler.step()

热门文章

  1. 安徽大学导游系统设计---迪杰斯特拉算法实现
  2. GWAS分析中SNP解释百分比PVE | 第三篇,MLM模型中如何计算PVE?
  3. 自留 校招 面试 用
  4. Matlab并行计算(新手)
  5. 论文阅读 【CVPR-2022】 A Simple Multi-Modality Transfer Learning Baseline for Sign Language Translation
  6. 初识R语言之数据读取篇
  7. 计算机组成原理名词解释
  8. python自动化脚本查找百度
  9. 神犇营-my1034-A + B = C
  10. 突发!京东AI掌门人、技术委员会主席周伯文离职!