热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

lstm多变量输入回归预测模型_教你搭建多变量时间序列预测模型LSTM(附代码、数据集)阿里云开发者社区...

长短期记忆循环神经网络等几乎可以完美地模拟多个输入变量的问题,这为时间序列预测带来极大益处。本文介绍了如何在Keras深度学习库中搭建用于多变量时间序列预测的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 浓度,以及天气信息,包括露点、温度、气压、风向、风速和降水时长。原始数据中的完整特征列表如下:

NO:行号

year:年份

month:月份

day:日

hour:时

pm2.5:PM2.5 浓度

DEWP:露点

TEMP:温度

PRES:气压

cbwd:组合风向

Iws:累计风速

s:累积降雪时间

Ir:累积降雨时间

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

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

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

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

基本数据准备

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

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

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

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

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

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

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

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

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

多变量 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)的天气变量。

完整的代码列表如下。

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

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

对风速进行一位有效编码

用差值和季节性调整使所有序列数据恒定

提供超过 1 小时的输入时间步长

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

定义和拟合模型

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

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

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

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

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

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

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

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

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

评估模型

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

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

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

完整示例

完整示例如下所示。

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

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

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

总结

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

具体点讲,你学会了:

如何将原始数据集转换成适用于时间序列预测的数据集

如何处理数据并使其适应用于多变量时间序列预测问题的 LSTM 模型。

如何做出预测并将结果重新调整到初始单元。

原文发布时间为:2017-11-6

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
author-avatar
学习社区
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有