lstm时间序列预测python_Keras中的多变量时间序列预测-LSTMs

神经网络诸如长短期记忆(LSTM)递归神经网络,几乎可以无缝地对多变量输入问题进行建模。

这在时间预测问题中非常有用,而经典线性方法难以应对多变量预测问题。

在本教程中,您将了解如何在Keras深度学习库中,为多变量时间序列预测开发LSTM模型。

学习该教程后,您将收获:

如何将原始数据集转换为可用于时间序列预测的数据集;

如何准备数据,并使LSTM模型适用于多变量时间序列预测问题;

如何做预测,并将预测的结果重新调整为原始数据单位。

让我们开始吧!

教程概括

该教程分为3部分,包括:

空气污染预测

数据准备

多变量LSTM预测模型

Python环境

你可以使用Python 2 或Python 3,需要安装scikit-learn、Numpy、Pandas、Matplotlib、 Scipy、Keras(2.0或更高版本)、TensorFlow或Theano backend等依赖包。

本试验在Anaconda Jupyter Notebook中进行,上述大部分依赖包均已内置,但仍需要安装单独安装TensorFlow、Theano backend。

如果你有任何问题:

请看这篇教程:如何在Anaconda中配置Python环境,进行机器学习和深度学习

1.空气污染预测

该教程中,我们将使用空气质量数据集。

该数据集字段包括日期时间、PM2.5浓度、露点、温度、风向、风速、雨雪累计小时数等,完整特征列表如下:

No:行号

year:该行记录的年

month:该行记录的月

day:该行记录的日

hour:该行记录的小时

pm2.5:PM2.5浓度(细颗粒物指环境空气中空气动力学当量直径小于等于 2.5微米的颗粒物。它能较长时间悬浮于空气中,其在空气中含量浓度越高,就代表空气污染越严重)

DEWP:露点(又称露点温度(Dew point temperature),在气象学中是指在固定气压之下,空气中所含的气态水达到饱和而凝结成液态水所需要降至的温度)

TEMP:温度

PRES:大气压力

cbwd:组合风向

lws:累计风速

ls:累计小时下雪量

lr:累计小时下雨量

该数据记录了北京某段时间每小时的气象情况和污染程度,我们将根据前几个小时的记录预测下个小时的污染程度。

你可以下载该数据集,或在线使用:

北京PM2.5数据集

2.数据准备

我们先看看数据长什么样:

yearmonthdayhourpm2.5DEWPTEMPPREScbwdIwsIsIr

No

12010110NaN-21-11.01021.0NW1.7900

22010111NaN-21-12.01020.0NW4.9200

32010112NaN-21-11.01019.0NW6.7100

42010113NaN-21-14.01019.0NW9.8400

52010114NaN-20-12.01018.0NW12.9700

可以看到日期和时间是分开的,第一步把日期时间合并为一个datetime,以便将其作为Pandas里的索引。

看数据表可知,第一个24小时里,PM2.5这一列有很多空值。因此,我们把第一个24小时里的数据行删掉。剩余的数据里面也有少部分空值,为了保持数据完整性和连续性,只要将空值填补为0即可。

下面的脚本加载了原始数据集,并将日期时间合并解析为Pandas DataFrame索引。删除No(序号)列,给剩下的列重新命名字段。最后替换空值为0,删除第一个24小时数据行。

from pandas import read_csv

from datetime import datetime

# 加载数据

def parse(x):

return datetime.strptime(x, '%Y %m %d %H')

dataset = read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/pollution.csv', parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)

#删除No列

dataset.drop('No', axis=1, inplace=True)

# 修改剩余列名称

dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']

dataset.index.name = 'date'

# 将所有空值替换为0

dataset['pollution'].fillna(0, inplace=True)

# 删除前24小时行

dataset = dataset[24:]

# 打印前5行

print(dataset.head(5))

# 保存数据到pollution.csv

dataset.to_csv('pollution.csv')

打印前5行,并将数据保存到pollution.csv,看一下:

pollution dew temp press wnd_dir wnd_spd snow rain

date

2010-01-02 00:00:00 129.0 -16 -4.0 1020.0 SE 1.79 0 0

2010-01-02 01:00:00 148.0 -15 -4.0 1

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSTM(长短期记忆)是一种递归神经网络(RNN),可以用于处理序列数据,例如时间序列预测。在Keras,可以使用LSTM层来构建多变量时间序列预测模型。 首先,需要将多个变量转换为单个输入向量。这可以通过将各个变量沿着时间轴堆叠在一起来实现。例如,如果有三个变量 $x_1, x_2, x_3$,每个变量都有 $n$ 个时间步长,则可以将它们组合成一个形状为 $(n, 3)$ 的单个输入张量。 然后,可以使用LSTM层来构建模型。例如,以下代码显示了如何构建具有一个LSTM层的模型: ```python from keras.models import Sequential from keras.layers import LSTM, Dense model = Sequential() model.add(LSTM(50, input_shape=(n_steps, n_features))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') ``` 在这里,`n_steps` 是时间序列的步长,`n_features` 是每个时间步长的变量数。在本例,我们使用一个LSTM层,其有50个神经元,并且输入形状为 `(n_steps, n_features)`。随后是一个具有一个神经元的密集层,并使用均方误差作为损失函数进行编译。 最后,可以使用训练数据来拟合模型,并使用测试数据进行预测。 ```python model.fit(X_train, y_train, epochs=100, batch_size=32) y_pred = model.predict(X_test) ``` 在这里,`X_train` 和 `y_train` 是训练数据,`X_test` 是测试数据。在训练期间,使用100个时期和一个批次大小为32来拟合模型。随后,可以使用 `predict` 方法来预测测试数据的输出。 以上是LSTM变量输入回归预测模型的基本步骤。具体的实现可能因数据类型和模型结构而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值