在时间序列相关的很多建模工作中,LSTM模型是经常会使用到的,从提出到现在LSTM模型已经有了很多的扩展、变种和应用,今天我们简单地实现基于LSTM模型来对多个变量的数据进行建模预测,在简单地预测中只能做单步预测,这里实现了多步的预测分析。

具体实现如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division'''
__Author__:沂水寒城
功能: 基于堆叠式LSTM神经网络的多变量序列预测模型
'''import os
import json
import sys
import math
import time
import keras
import random
import pymysql
import datetime
import platform
import numpy as np
import pandas as pd
from keras.utils import plot_model
from  keras.layers.pooling import MaxPooling1D
from keras.layers import LSTM,Dense,Input,add,Flatten
import matplotlib.pyplot as plt
from keras.models import Sequential,Model
from sklearn.preprocessing import MinMaxScaler,LabelBinarizer,LabelEncoder,Imputer
from keras.layers.core import Activation,Dropout,Dense,Flatten
from sklearn.model_selection import train_test_split
from scipy.stats import pearsonr,spearmanr,kendalltau
from keras.callbacks import EarlyStopping,ModelCheckpoint,Callback
from keras.layers.normalization import  BatchNormalization
from keras.optimizers import SGD, Adadelta, Adagrad,RMSprop
from keras.layers.advanced_activations import PReLU
from utils import predictFuture
from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score
from keras.layers.convolutional import Conv1D,ZeroPadding1D,Conv2D,MaxPooling2D,AveragePooling2D,Convolution2D,ZeroPadding2D
from keras.layers import Dense, Dropout, Embedding, LSTM, Bidirectional
from keras.layers import TimeDistributeddef sliceWindow(data,step):'''移动滑窗创建数据集'''X,y=[],[]for i in range(0,len(data)-step,1):end=i+steponeX,oney=data[i:end,:],data[end, :]X.append(oneX)y.append(oney)return np.array(X),np.array(y)def dataSplit(dataset,step):'''数据集分割'''datasetX,datasetY=sliceWindow(dataset,step)train_size=int(len(datasetX)*0.70)X_train,y_train=datasetX[0:train_size,:],datasetY[0:train_size,:]X_test,y_test=datasetX[train_size:len(datasetX),:],datasetY[train_size:len(datasetX),:]X_train=X_train.reshape(X_train.shape[0],step,-1)X_test=X_test.reshape(X_test.shape[0],step,-1)print('X_train.shape: ',X_train.shape)print('X_test.shape: ',X_test.shape)print('y_train.shape: ',y_train.shape)print('y_test.shape: ',y_test.shape)return X_train,X_test,y_train,y_testdef seq2seqModel(X,step):'''序列到序列堆叠式LSTM模型'''model=Sequential()model.add(LSTM(256, activation='relu', return_sequences=True,input_shape=(step,X.shape[2])))model.add(LSTM(256, activation='relu'))model.add(Dense(X.shape[2]))model.compile(optimizer='adam', loss='mse')return modelif __name__=='__main__':#数据集加载with open('dataset.txt') as f:data_list=[one.strip().split(',') for one in f.readlines()[1:] if one]dataset=[]for i in range(len(data_list)):dataset.append([float(O) for O in data_list[i][1:]])dataset=np.array(dataset)step=7X_train,X_test,y_train,y_test=dataSplit(dataset,step)model=seq2seqModel(X_train,step)model.fit(X_train,y_train,epochs=50,verbose=0)# test=[#       [30.0,58.0,7.0,24.0,0.9,83.0,103.0],#       [43.0,72.0,6.0,23.0,1.1,85.0,103.0],#       [66.0,105.0,6.0,22.0,1.3,134.0,103.0],#       [54.0,94.0,7.0,27.0,1.1,125.0,103.0],#       [64.0,90.0,6.0,19.0,1.2,127.0,103.0],#       [59.0,92.0,6.0,20.0,1.1,126.0,103.0],#       [61.5,91.0,6.0,19.5,1.15,134.0,103.0]#      ]# #真实值   [38.0,66.0,5.0,17.0,1.2,138.0,103.0]# test=np.array(test)# test=test.reshape((1,step,7))# y_pre=model.predict(test,verbose=0)# print('y_pre: ',y_pre)future=predictFuture(model,dataset,7,step,60)for one in future:print('one: ',one)dataset=[]for i in range(len(data_list)):dataset.append([float(O) for O in data_list[i][1:]])D1=[one[0] for one in dataset]D2=[one[0] for one in future]plt.plot(list(range(len(D1))),D1,label='F1 True')plt.plot(list(range(len(D1),len(D1)+len(D2))),D2,label='F1 Future Predict')plt.legend()plt.title('Data True and Predict Cruve')plt.savefig('demo.png')

我们在代码中提供了单个样本的测试样例,如下所示:

预测结果如下:

接下来我们基于滚动预测对未来60个时刻的数据进行了预测分析,部分输出截图如下:

为了对比分析,我们绘制了原始数据曲线和预测的数据曲线,如下图所示:

学习记录了!

Python实现多变量序列堆叠式LSTM模型,并实现未来多时刻预测相关推荐

  1. LSTM模型(基于Keras框架)预测特定城市或者区域的太阳光照量实战

    LSTM模型(基于Keras框架)预测特定城市或者区域的太阳光照量实战 LSTM在解决序列预测的问题时非常强大,因为它们能够存储之前的信息. LSTM是一种时间递归神经网络,它出现的原因是为了解决RN ...

  2. Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

    全文下载链接:http://tecdat.cn/?p=20678 在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注.然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑战性的 ...

  3. LSTM模型实战案例:TensorFlow实现预测3位彩票号码

    向AI转型的程序员都关注了这个号

  4. 如何建立Multi-Step(多步预测)的LSTM时间序列模型(以对家庭用电预测为例)

    译自How to Develop LSTM Models for Multi-Step Time Series Forecasting of Household Power Consumption~ ...

  5. Python中TensorFlow长短期记忆神经网络LSTM、指数移动平均法预测股票市场时间序列和可视化

    最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出. 本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测. 相关视频:LSTM神经网络架构和工作原理及 ...

  6. 开发和设计实现LSTM模型用于家庭用电的多步时间序列预测

    鉴于智能电表的兴起以及太阳能电池板等发电技术的广泛采用,有大量的用电数据可供选择.该数据代表了多变量时间序列的功率相关变量,这些变量又可用于建模甚至预测未来的电力消耗. 与其他机器学习算法不同,长期短 ...

  7. LSTM模型对家庭用电进行多步时间序列预测

    随着智能电表的兴起和太阳能电池板等发电技术的广泛应用,有大量可用的用电数据.这些数据代表了一系列与电力相关的多元时间序列,进而可以用来建模甚至预测未来的用电量.与其他机器学习算法不同,长短时记忆递归神 ...

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

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

  9. 时间序列深度学习:状态 LSTM 模型预測太阳黑子(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/82111558 作者:徐瑞龙,量化分析师,R语言中文 ...

  10. 数据分享|SAS与eviews用ARIMA模型对我国大豆产量时间序列预测、稳定性、白噪声检验可视化...

    全文链接:http://tecdat.cn/?p=31480 我国以前一直以来都是世界上大豆生产的第一大国.但由于各国的日益强大,导致我国豆种植面积和产量持续缩减.因此,预测我国的大豆产量对中国未来的 ...

最新文章

  1. 继承项目第13周-项目1-基类中成员的访问限定符和派生类的继承方式
  2. javascript 循环语句 while、do-while、for-in、for用法区别
  3. 什么样的网页百度爱收录?
  4. kindeditor-网页文字编辑
  5. Java8中使用以下类计算日期时间差:Period、Duration、ChronoUnit
  6. c 修改mysql数据库_c 修改mysql数据库
  7. 今天开始学习QT for sysbiam 1
  8. 在Linux中smbfs文件系统的挂载
  9. 有关计算机科学的问卷调查,E问卷:社会调查问卷新形式
  10. 大学四年Java学习路线规划,所有私藏资料我都贡献出来了,我要是早知道就好了
  11. 步进电机的计算机控制系统设计,步进电机控制系统的设计与实现
  12. 开始学习 HarmonyOS 嵌入式开发
  13. 计算机无法访问,您可能没有权限使用网络资源.请与这台服务器的管理员联系的解决办
  14. Android MQTT TLS/SSL 认证
  15. Excel VBA将所有Sheet重命名为单元格a1的名称
  16. Yii Framework 开发教程(36) Zii组件-DatePicker示例
  17. java 数学测试_Java实现小学数学练习
  18. 【浙江大学C小程week6知识点整理】
  19. SQL注入-攻入Apple ID钓鱼网站实录
  20. android渠道首发规则,酷传推广手册-Android渠道首发规则.doc

热门文章

  1. 2019.6.18 区块链论文翻译
  2. 自由测试人Jarod的一天
  3. 还原二叉树--根据后序中序输出先序
  4. 带你快速玩转canvas——写个折线图
  5. ThinkPHP去除url中的index.php
  6. 我的Java开发学习之旅------Java经典排序算法之冒泡排序
  7. 使用Java Api 操作HDFS
  8. 上周热点回顾(4.30-5.6)
  9. 用SQL Server(T-SQL)获取连接字符串
  10. MYSQL 数据库 创建库和删除库的语句