教你搭建多变量时间序列预测模型LSTM(附代码、数据集)

简介: 长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。 诸如长短期记忆(LSTM)循环神经网络的神经神经网络几乎可以无缝建模具备多个输入变量的问题。

长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。

诸如长短期记忆(LSTM)循环神经网络的神经神经网络几乎可以无缝建模具备多个输入变量的问题。

这为时间序列预测带来极大益处,因为经典线性方法难以适应多变量或多输入预测问题。

通过本教程,你将学会如何在 Keras 深度学习库中搭建用于多变量时间序列预测的 LSTM 模型。

完成本教程后,你将学会:

如何将原始数据集转换成适用于时间序列预测的数据集
如何处理数据并使其适应用于多变量时间序列预测问题的 LSTM 模型。
如何做出预测并将结果重新调整到初始单元。


我们开始吧!

教程概述

本教程分为三大部分,分别是:

  • 空气污染预测
  • 准备基本数据
  • 搭建多变量 LSTM 预测模型


Python 环境

  • 本教程假设你配置了 Python SciPy 环境,Python 2/3 皆可。
  • 你还需要使用 TensorFlow 或 Theano 后端安装 Keras(2.0 或更高版本)。
  • 本教程还假定你已经安装了 scikit-learn、Pandas、NumPy 和 Matplotlib。


空气污染预测


本教程将使用空气质量数据集。这是美国驻北京大使馆记录了五年的数据集,其按小时报告天气和污染水平。

此数据包括日期、PM2.5 浓度,以及天气信息,包括露点、温度、气压、风向、风速和降水时长。原始数据中的完整特征列表如下:


  1. NO行号
  2. year年份
  3. month月份
  4. day
  5. hour
  6. pm2.5PM2.5 浓度
  7. DEWP露点
  8. TEMP温度
  9. PRES气压
  10. cbwd组合风向
  11. Iws累计风速
  12. s累积降雪时间
  13. Ir:累积降雨时间


我们可以使用这些数据并构建一个预测问题,我们根据过去几个小时的天气条件和污染状况预测下一个小时的污染状况。此数据集亦可用于构建其他预测问题。

您可以从 UCI 机器学习库中下载此数据集。

  • 下载地址:https://archive.ics.uci.edu/ml/datasets/Beijing+PM2.5+Data

下载数据集并将其命名为「raw.csv」,放置到当前工作目录。

基本数据准备

原始数据尚不可用,我们必须先处理它

以下是原始数据集的前几行数据。

e929a0b3dfccabb3ed3957b0f9c3885127e02a1a

第一步,将零散的日期时间信息整合为一个单一的日期时间,以便我们可以将其用作 Pandas 的索引。

快速检查第一天的 pm2.5 的 NA 值。因此,我们需要删除第一行数据。在数据集中还有几个零散的「NA」值,我们现在可以用 0 值标记它们。

以下脚本用于加载原始数据集,并将日期时间信息解析为 Pandas DataFrame 索引。「No」列被删除,每列被指定更加清晰的名称。最后,将 NA 值替换为「0」值,并删除前一天的数据。

1fac7142f2e75ee1770c65049e7806f197940162

运行该例子打印转换后的数据集的前 5 行,并将转换后的数据集保存到「pollution.csv」。

c3bc7f015b788f3b872225deb1a4702853ca2aae

现在数据已经处理得简单易用,我们可以为每个天气参数创建快图,看看能得到什么。

下面的代码加载了「pollution.csv」文件,并且为每个参数(除用于分类的风速以外)绘制了单独的子图。

e47bd8bc642c6ef23e1d3754047b96dd46ac30e4

运行上例创建一个具有 7 个子图的大图,显示每个变量 5 年中的数据。

8d013bb303481bc61dab9e068404bb467886ac1a


多变量 LSTM 预测模型


本节,我们将调整一个 LSTM 模型以适合此预测问题。

LSTM 数据准备

第一步是为 LSTM 模型准备污染数据集,这涉及将数据集用作监督学习问题以及输入变量归一化。

我们将监督学习问题设定为:根据上一个时间段的污染指数和天气条件,预测当前时刻(t)的污染情况。

这个表述简单直接,只是为了说明问题。你可以探索的一些替代方案包括:

  • 根据过去一天的天气情况和污染状况,预测下一个小时的污染状况。
  • 根据过去一天的天气情况和污染状况以及下一个小时的「预期」天气条件,预测下一个小时的污染状况。


我们可以使用之前博客中编写的 series_to_supervised()函数来转换数据集:

  • 如何用 Python 将时间序列问题转换为监督学习问题(https://machinelearningmastery.com/convert-time-series-supervised-learning-problem-python/)

首先加载「pollution.csv」数据集。给风速特征打上标注(整型编码)。如果你再深入一点就会发现,整形编码可以进一步进行一位有效编码(one-hot encoding)。

接下来,所有特征都被归一化,然后数据集转换成监督学习问题。之后,删除要预测的时刻(t)的天气变量。

完整的代码列表如下。

98a6b07b46f4d9ef247493025d7a14d7fd64ad04

运行上例打印转换后的数据集的前 5 行。我们可以看到 8 个输入变量(输入序列)和 1 个输出变量(当前的污染水平)。

2fe749a1d11fc8dce57d12f1d22a1fcada808318

这个数据准备过程很简单,我们可以深入了解更多相关知识,包括:

  • 对风速进行一位有效编码
  • 用差值和季节性调整使所有序列数据恒定
  • 提供超过 1 小时的输入时间步长

最后也可能是最重要的一点,在学习序列预测问题时,LSTM 通过时间步进行反向传播。


定义和拟合模型

在本节中,我们将拟合多变量输入数据的 LSTM 模型。

首先,我们必须将准备好的数据集分成训练集和测试集。为了加快此次讲解的模型训练,我们将仅使用第一年的数据来拟合模型,然后用其余 4 年的数据进行评估。

下面的示例将数据集分成训练集和测试集,然后将训练集和测试集分别分成输入和输出变量。最后,将输入(X)重构为 LSTM 预期的 3D 格式,即 [样本,时间步,特征]。

6a7bfd2a5adaeafa15662c776d38ebbfb47f1a45

运行此示例输出训练数据的维度,并通过测试约 9K 小时的数据对输入和输出集合进行训练,约 35K 小时的数据进行测试。

9ca1be9a78a0f64f2ae5fbfeacf51e7794e479cd

我们现在可以定义和拟合 LSTM 模型了。

我们将在第一个隐藏层中定义具有 50 个神经元的 LSTM,在输出层中定义 1 个用于预测污染的神经元。输入数据维度将是 1 个具有 8 个特征的时间步长。

我们将使用平均绝对误差(MAE)损失函数和高效的随机梯度下降的 Adam 版本。

该模型将适用于 50 个 epoch,批大小为 72 的训练。请记住,每个批结束时,Keras 中的 LSTM 的内部状态都将重置,因此内部状态是天数的函数可能有所帮助(试着证明它)。

最后,我们通过在 fit()函数中设置 validation_data 参数来跟踪训练过程中的训练和测试损失,并在运行结束时绘制训练和测试损失图。

bd4088a399b6e14712890edda99d3c88ee840b9d

评估模型

模型拟合后,我们可以预测整个测试数据集。

我们将预测与测试数据集相结合,并调整测试数据集的规模。我们还用预期的污染指数来调整测试数据集的规模。

通过初始预测值和实际值,我们可以计算模型的误差分数。在这种情况下,我们可以计算出与变量相同的单元误差的均方根误差(RMSE)。

8e38f031260697b8759aa790d4d1ec58b8d190d2

完整示例

完整示例如下所示。

167b08ac8a91c493117bf0051c12c9baa0099d52

运行示例首先创建一幅图,显示训练中的训练和测试损失。


有趣的是,我们可以看到测试损失低于训练损失。该模型可能过度拟合训练数据。在训练过程中测绘 RMSE 可能会使问题明朗。

393393626b030d5d54826d842de2fc4821e1afd8

在每个训练 epoch 结束时输出训练和测试的损失。在运行结束后,输出该模型对测试数据集的最终 RMSE。我们可以看到,该模型取得了不错的 RMSE——3.836,这显著低于用持久模型(persistence model)得到的 RMSE(30)。

93c3ba5c69aaf395133ac490f6b2ce24dda60509

总结


在本教程中,您学会了如何将 LSTM 应用于多变量时间序列预测问题。

具体点讲,你学会了:

  • 如何将原始数据集转换成适用于时间序列预测的数据集
  • 如何处理数据并使其适应用于多变量时间序列预测问题的 LSTM 模型。
  • 如何做出预测并将结果重新调整到初始单元。
原文发布时间为:2017-11-6
本文来自云栖社区合作伙伴“ 数据派THU”,了解相关信息可以关注“ 数据派THU”微信公众号
相关文章
|
4月前
|
机器学习/深度学习 算法 安全
【光伏功率预测】基于EMD-PCA-LSTM的光伏功率预测模型(Matlab代码实现)
【光伏功率预测】基于EMD-PCA-LSTM的光伏功率预测模型(Matlab代码实现)
268 1
|
5月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
196 2
|
7月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
7月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本内容包含基于BiLSTM与遗传算法(GA)的算法介绍及实现。算法通过MATLAB2022a/2024b运行,核心为优化BiLSTM超参数(如学习率、神经元数量),提升预测性能。LSTM解决传统RNN梯度问题,捕捉长期依赖;BiLSTM双向处理序列,融合前文后文信息,适合全局信息任务。附完整代码(含注释)、操作视频及无水印运行效果预览,适用于股票预测等场景,精度优于单向LSTM。
|
4月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
456 2
|
3月前
|
机器学习/深度学习 自然语言处理 PyTorch
21_RNN与LSTM:序列建模的经典方法
在自然语言处理领域,处理序列数据是一个核心挑战。传统的机器学习方法难以捕捉序列中的时序依赖关系,而循环神经网络(Recurrent Neural Network,RNN)及其变种长短期记忆网络(Long Short-Term Memory,LSTM)通过其独特的循环结构,为序列建模提供了强大的解决方案。本教程将深入探讨RNN和LSTM的原理、实现方法和最新应用,帮助读者全面掌握这一NLP核心技术。
|
7月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本内容展示了一种基于粒子群优化(PSO)与时间卷积神经网络(TCN)的时间序列预测方法。通过 MATLAB2022a 实现,完整程序运行无水印,核心代码附详细中文注释及操作视频。算法利用 PSO 优化 TCN 的超参数(如卷积核大小、层数等),提升非线性时间序列预测性能。TCN 结构包含因果卷积层与残差连接,结合 LSTM 构建混合模型,经多次迭代选择最优超参数,最终实现更准确可靠的预测效果,适用于金融、气象等领域。
|
5月前
|
机器学习/深度学习 算法 物联网
基于WOA-CNN-LSTM-Attention、CNN-LSTM-Attention、WOA-CNN-LSTM、CNN-LSTM、LSTM、CNN6模型多变量时序预测一键对比研究(Matlab代码)
基于WOA-CNN-LSTM-Attention、CNN-LSTM-Attention、WOA-CNN-LSTM、CNN-LSTM、LSTM、CNN6模型多变量时序预测一键对比研究(Matlab代码)
207 0
|
7月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
7月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于Matlab 2022a/2024b实现,结合灰狼优化(GWO)算法与双向长短期记忆网络(BiLSTM),用于序列预测任务。核心代码包含数据预处理、种群初始化、适应度计算及参数优化等步骤,完整版附带中文注释与操作视频。BiLSTM通过前向与后向处理捕捉序列上下文信息,GWO优化其参数以提升预测性能。效果图展示训练过程与预测结果,适用于气象、交通等领域。LSTM结构含输入门、遗忘门与输出门,解决传统RNN梯度问题,而BiLSTM进一步增强上下文理解能力。

热门文章

最新文章