文章目录

  • 数据格式
  • 代码部分

这个是我在github上看到的,学习完进行记录

数据格式

代码部分

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: LSTM长期预测.py
@time: 2020/11/13 15:48
"""
'''
LSTM长期预测:使用LSTM算法对时间序列进行长期预测,标签是多维的,这里是二维,时间步长这里是12,预测天数这里是10都可作为参数调节
'''
import warnings
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.preprocessing import StandardScalerimport tensorflow as tf
from tensorflow import keras
from keras.layers.recurrent import LSTM
from tensorflow.keras import layers, optimizers, metrics, losses, callbacks# 读取数据并绘图
def read_data(filepath):data_origin = pd.read_excel(filepath, header=0)# print(data_origin.head())# data_origin = data_origin.replace(0,np.NAN)# data_origin.dropna(inplace=True)# data_origin.fillna(method='pad',inplace=True)# 画图fig = plt.figure(figsize=(15, 5))fig.add_subplot()plt.plot(data_origin.iloc[:-200, 1])  # iloc通过整数位置为基础的索引来选择plt.show(block=False)return data_origin#
# 归一化
def min_max_scaler(data):# x = (x - x_min) / (x_max - x_min)data_1 = (data - data.min()) / (data.max() - data.min())return data_1# 反归一化
def inverse_data(y_test_pred, data_origin):pred = y_test_pred * (data_origin.max()[1] - data_origin.min()[1]) + data_origin.min()[1]return pred# 构造数据集
def make_dataset(data, window, label_dim):data_2 = np.array(data)length = data_2.shape[0]features_num = data_2.shape[1]x = []y = []for i in range(length - window - label_dim):x.append(data_2[i:i + window, :])y.append(data_2[i + window:i + window + label_dim, -1])x = np.array(x)y = np.array(y)return x, y# 划分数据集
def splitdata(x, y):x_train, x_test, y_train, y_test = x[:-1, :], x[-1, :], y[:-1, :], y[-1, :]return x_train, x_test, y_train, y_test# LSTM模型
def lstm_model(label_dim, windows, Dropout, features_num=2):# 定义输入inputs = tf.keras.Input(shape=(windows, features_num))# 定义层# return_sequences = False表示是否返回最后的输出x = LSTM(label_dim, return_sequences=False)(inputs)# x = layers.Dropout(Dropout)(x)x = layers.Dense(label_dim * 2, activation='relu')(x)  # 全连接层# x = layers.Dropout(Dropout)(x)x = layers.Dense(label_dim)(x)# 定义模型-指定输入、输出model = tf.keras.Model(inputs=inputs, outputs=x)return modelif __name__ == '__main__':warnings.filterwarnings(action='ignore')plt.style.use('fivethirtyeight')  # 画图风格np.random.seed(100)# 参数windows = 12  # 时间窗label_dim = 10  # 标签维度-预测多少个数据amount_of_features = 1  # 特征数量dropout = 0.05  # dropout系数batch_size = 64  # 批训练数量epoch = 50  # 总迭代次数show_num = 100  # 展示训练集最后多少个数据点filepath = './data/Data2.xlsx'# 读取数据data_origin = read_data(filepath)# print(data.shape)       # (5462, 2)# 归一化data = min_max_scaler(data_origin)# 构造针对机器学习模型的数据集(特征与标签)-长期预测x, y = make_dataset(data, windows, label_dim)# print(x.shape)      # (5400, 12, 2)# print(y.shape)      # (5400, 50)# 划分数据集x_train, x_test, y_train, y_test = splitdata(x, y)# print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)    # (5399, 12, 2) (1, 12, 2) (5399, 50) (1, 50)# LSTM模型model = lstm_model(label_dim, windows, Dropout=dropout, features_num=2)# 编译模型model.compile(optimizer=optimizers.Adam(learning_rate=1e-3),loss=tf.keras.losses.MSE,metrics=['accuracy'])# 模型参数model.summary()# 训练模型# epoch表示对整个输入数据的一次迭代# batch_size表示当传递numpy数据时,模型将数据切成较小的批次,并在训练期间对这些批次进行迭代# validation_split含义:浮点数在0和1之间。用作验证数据的训练数据的一部分。该模型将分离出这部分训练数据,不会对其进行训练,并将在每个时代结束时评估损失和该数据的任何模型指标# early_stop = callbacks.EarlyStopping(monitor='val_loss', min_delta=0.0001, patience=20, verbose=1)history = model.fit(x_train, y_train, epochs=epoch, batch_size=batch_size, verbose=1, validation_split=0.1)# 预测模型y_test_pred = model.predict(x_test)[0, :]# 反归一化y_pred = inverse_data(y_test_pred, data_origin)print(y_pred)# rmsermse = np.sqrt(mean_squared_error(y_pred,y_test.reshape(-1,1)))# 构建迭代loss变化图像loss = history.history['loss']val_loss = history.history['val_loss']epochs_range = np.arange(epoch)fig = plt.figure(figsize=(15, 5))fig.add_subplot()plt.plot(epochs_range, loss, label='Train Loss')plt.plot(epochs_range, val_loss, label='Val_loss')plt.legend(loc='upper right')plt.title('Train and Val Loss')plt.show()# 画图,展示100个数据data_origin = data_origin.valuestrain = data_origin[-show_num:-label_dim, -1]test = data_origin[-label_dim:, -1]# np.hstack(tup)表示在第二个轴的方向上水平堆叠数组pred = np.hstack((train, y_pred))real = np.hstack((train, test))fig = plt.figure(figsize=(15, 5))fig.add_subplot()plt.axvline(len(train) - 1, linestyle='dotted', linewidth=5, color='r')plt.plot(pred, 'r-', label='prediction')plt.plot(real, 'b-', label='real')plt.legend(loc='best')plt.title('RMSE : %.4f'%rmse)plt.show()



学习到了进行多维长期预测数据集的构造和迭代损失变化图的构造


如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!


时间序列-LSTM长期预测相关推荐

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

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

  2. Python时间序列模型推理预测实战:时序推理数据预处理(特征生成、lstm输入结构组织)、模型加载、模型预测结果保存、条件判断模型循环运行

    Python时间序列模型推理预测实战:时序推理数据预处理(特征生成.lstm输入结构组织).模型加载.模型预测结果保存.条件判断模型循环运行 目录

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

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

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

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

  5. bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras

    一.问题背景     现实生活中,在一系列时间点上观测数据是司空见惯的活动,在农业.商业.气象军事和医疗等研究领域都包含大量的时间序列数据.时间序列的预测指的是基于序列的历史数据,以及可能对结果产生影 ...

  6. lstm代码_只需5行代码!LSTM时间序列建模以及预测

    最近我在github上看到一个项目,项目内容是将深度学习方法(LSTM.RNN.GRU)进行时间序列建模的过程进行了封装,使得调用者调用者只需5行代码能完成时间序列建模以及预测的全过程. 项目本身是使 ...

  7. Python时间序列LSTM预测系列教程(6)-单变量

    单变量LSTM预测模型(6) 教程原文连接 前置教程: Python时间序列LSTM预测系列教程(1)-单变量 Python时间序列LSTM预测系列教程(2)-单变量 Python时间序列LSTM预测 ...

  8. python深度学习之基于LSTM时间序列的股票价格预测

    1.本文是一篇LSTM处理时间序列的案例 我们先来看看数据集,这里包含了一只股票的开盘价,最高价,最低价,收盘价,交易量的信息. 本文基于LSTM对收盘价(close)进行预测 2. 单维对单步的预测 ...

  9. 只需5行代码! LSTM时间序列建模以及预测

    最近我在github上看到一个项目,项目内容是将深度学习方法(LSTM.RNN.GRU)进行时间序列建模的过程进行了封装,使得调用者调用者只需5行代码能完成时间序列建模以及预测的全过程. 项目本身是使 ...

  10. tf.keras 11: 时间序列预测之LSTM天气预测

    本教程介绍了使用递归神经网络(RNN)进行时间序列预测的流程.包括两个部分:首先,预测单变量时间序列,然后预测多变量时间序列. 文章目录 1. 数据集介绍 2. 单变量单步输出预测 2.1 数据标准化 ...

最新文章

  1. MAC OSX10.9.2上搭建Apache,php
  2. 预防鼻炎以及空气污染对策
  3. 一文带你了解隐马尔科夫模型
  4. SpringBoot里实现了某个接口的实现类运行时如何注入的?
  5. Java 8:对速度3.0.1“森林”流ORM的更深入了解
  6. FineUI 将不再内置 ExtJS (严格遵守 ExtJS 的开源规则)
  7. 第一个Sprint冲刺成果
  8. struts2 jsp提交对象数据要这么干
  9. 【取词翻译软件】CopyTranslator(deepin20可用的复制即翻译的外文辅助阅读方案)
  10. 目前计算机无法显示的四叠字,四叠字大全列表
  11. CK-GW06-E01与恩基士PLC配置指南
  12. android系统蓝牙自动连接
  13. android : 小米手机 打开开发者 选项 PC 端 安装 apk
  14. 【有利可图网】PS技巧:巧用PS制作朦胧古风美女!
  15. 用计算机的声音编辑工具录制一段语音信号,语音信号的频谱分析实验指导
  16. ADAS测试设备—惯性导航系统简介
  17. 【算法】狄利克雷过程 (Dirichlet过程)
  18. 基于matlab的立体图像编码解码算法仿真与分析
  19. MSP430F5529输出PWM
  20. 博士申请 | 香港中文大学(深圳)语音与语言实验室招收Speech/NLP方向全奖博士生...

热门文章

  1. poj 3321 Apple Tree 树状数组
  2. [转]NS2上实现一个简单的路由协议
  3. C++的三种交换数值的方式(值传递、地址传递、引用传递)
  4. mysql grant权限分配(转)。
  5. CentOS7 安装Redis 单机版
  6. hdu 3746 kmp的next数组理解
  7. CSS属性之position
  8. TreeSet简单介绍与使用方法
  9. php面向对象、语法【访问成员的情形:外和方法内调用对象的关键字this】、构造函数的场景和析构函数的场景...
  10. table 谷歌下不出现滚动条