码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享...


    全文下载链接:http://tecdat.cn/?p=23544

    在本文中,长短期记忆网络——通常称为“LSTM”——是一种特殊的RNN递归神经网络,能够学习长期依赖关系(点击文末“阅读原文”获取完整代码数据)。

    本文使用降雨量数据(查看文末了解数据免费获取方式)进行分析。


    视频:LSTM神经网络架构和工作原理及其在Python中的预测应用


    什么是依赖关系?

    假设您在观看视频时记得前一个场景,或者在阅读一本书时您知道前一章发生了什么。

    传统的神经网络无法做到这一点,这是一个主要缺点。例如,假设您想对电影中每一点发生的事件进行分类。目前尚不清楚传统的神经网络如何利用电影中先前事件来推理后来的事件。

    b5ebd5bd3907e5b365610f5c438baa23.png

    递归神经网络解决了这个问题。它们是带有循环的网络,允许信息持续存在。循环神经网络有循环。

    在上图中,一大块神经网络,查看一些输入x并输出一个值h. 循环允许信息从网络的一个步骤传递到下一个步骤。

    93db31938ae4bcb62e14e6714166b080.png

    这些循环使循环神经网络看起来有点神秘。然而,如果你想得更多,就会发现它们与普通的神经网络并没有什么不同。循环神经网络可以被认为是同一网络的多个副本,每个副本都将消息传递给后继者。考虑一下如果我们展开循环会发生什么:

    这种链状性质表明循环神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。在过去的几年里,将 RNN 应用于各种问题取得了令人难以置信的成功:语音识别、语言建模、翻译、图像字幕……不胜枚举。这些成功的关键是使用“LSTM”,这是一种非常特殊的循环神经网络,几乎所有基于循环神经网络的令人兴奋的结果都是用它们实现的。本文将探讨的正是这些 LSTM。

    长期依赖问题

    下面是一个关于如何使用循环神经网络(RNN)来拟合语言模型的例子。

    RNN 的吸引力之一是它们可能能够将先前的信息与当前任务联系起来,例如使用先前的视频帧可能会告知对当前帧的理解。如果 RNN 可以做到这一点,它们将非常有用。但他们可以吗?

    有时,我们只需要查看最近的信息即可执行当前任务。例如,考虑一个语言模型试图根据之前的单词预测下一个单词。如果我们试图预测“云在天空”中的最后一个词,我们不需要任何进一步的上下文——很明显下一个词将是天空。在这种情况下,相关信息与所需位置之间的差距很小,RNN 可以学习使用过去的信息。

    9e46ab3bc628e50e021ea771edc9e572.png

    但也有我们需要更多上下文的情况。考虑尝试预测文本“我在中国长大……我说地道的中文”中的最后一个词。最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言的范围,我们需要中国的上下文,从更远的地方。相关信息和需要的点之间的差距完全有可能变得非常大。

    7b874881bea4e9b7c410070fe2c74aca.png

    随着差距的扩大,RNN 变得无法学习连接信息。

    LSTM 网络

    长短期记忆网络——通常称为“LSTM”——是一种特殊的 RNN,能够学习长期依赖关系。它们在解决各种各样的问题时表现出色,现在被广泛使用。LSTM 被明确设计为避免长期依赖问题。长时间记住信息实际上是他们的默认行为,而不是他们难以学习的东西!

    所有循环神经网络都具有神经网络的重复模块链的形式。在标准 RNN 中,此重复模块将具有非常简单的结构,例如单个 tanh 层。

    9ccd29cf7ff8c11c9a7eb0f33020a7ac.png

    LSTM 也有这种链状结构,但重复模块有不同的结构。不是只有一个神经网络层,而是三个部分组成,以一种非常特殊的方式进行交互。

    ce2f5df832dd1ab087c6030e9c9d90c7.png

    LSTM 的工作方式非常类似于 RNN 单元。这是 LSTM 网络的内部功能。LSTM 由三个部分组成,如图所示,每个部分执行一个单独的功能。第一部分选择来自前一个时间戳的信息是被记住还是不相关并且可以被遗忘。在第二部分中,单元尝试从该单元的输入中学习新信息。最后,在第三部分,单元将更新的信息从当前时间戳传递到下一个时间戳。LSTM 单元的这三个部分称为门。第一部分称为忘记门或遗忘门,第二部分称为输入门,最后一部分称为输出门。

    Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

    每年的降雨量数据可能是相当不平稳的。与温度不同,温度通常在四季中表现出明显的趋势,而雨量作为一个时间序列可能是相当不平稳的。夏季的降雨量与冬季的降雨量一样多是很常见的。

    下面是某地区2020年11月降雨量数据(查看文末了解数据获取方式)的图解。

    1eda0aa4569122db1efd6a7e3aa04b9a.png

    作为一个连续的神经网络,LSTM模型可以证明在解释时间序列的波动性方面有优势。

    使用Ljung-Box检验,小于0.05的p值表明这个时间序列中的残差表现出随机模式,表明有明显的波动性。

    >>> sm.stats.acorr_ljungbox(res.resid, lags=\[10\])

    Ljung-Box检验

    6f2a3323f6bded7bee3786f02c634c9b.png

    Dickey-Fuller 检验

    105b5a9ff85233a09d40584203a636af.png

    数据操作和模型配置

    该数据集由722个月的降雨量数据组成。

    选择712个数据点用于训练和验证,即用于建立LSTM模型。然后,过去10个月的数据被用来作为测试数据,与LSTM模型的预测结果进行比较。

    下面是数据集的一个片段。

    54f7eee219cb7ed9c874b080667ade4a.png

    然后形成一个数据集矩阵,将时间序列与过去的数值进行回归。

    1. # 形成数据集矩阵
    2.     for i in range(len(df)-previous-1):
    3.         a = df\[i:(i+previous), 0\]
    4.         dataX.append(a)
    5.         dataY.append(df\[i + previous, 0\])

    然后用MinMaxScaler对数据进行标准化处理。

    f3216cb95bbba02ea79c411501a7ae9b.png

    将前一个参数设置为120,训练和验证数据集就建立起来了。作为参考,previous = 120说明模型使用从t - 120到t - 1的过去值来预测时间t的雨量值。

    前一个参数的选择要经过试验,但选择120个时间段是为了确保识别到时间序列的波动性或极端值。

    1. # 训练和验证数据的划分
    2. train_size = int(len(df) * 0.8)
    3. val\_size = len(df) - train\_size
    4. train, val = df\[0:train\_size,:\], df\[train\_size:len(df),:\]# 前期的数量
    5. previous = 120

    然后,输入被转换为样本、时间步骤、特征的格式。

    1. # 转换输入为\[样本、时间步骤、特征\]。
    2. np.reshape(X_train, (shape\[0\], 1, shape\[1\]))

    模型训练和预测

    该模型在100个历时中进行训练,并指定了712个批次的大小(等于训练和验证集中的数据点数量)。

    1. # 生成LSTM网络
    2. model = tf.keras.Sequential()
    3. # 列出历史中的所有数据
    4. print(history.history.keys())
    5. # 总结准确度变化
    6. plt.plot(history.history\['loss'\])

    下面是训练集与验证集的模型损失的关系图。

    fb71a1c90e609e5265de2819d8259d5d.png

    预测与实际降雨量的关系图也被生成。


    点击标题查阅往期内容

    20c390f2ddc69e9d91fd948071ff4d6e.jpeg

    在Python中使用LSTM和PyTorch进行时间序列预测

    outside_default.png

    左右滑动查看更多

    outside_default.png

    01

    072c72934211f8c135a783fd25cfb2ec.png

    02

    a408b309df1a9537965d1868b2c25c05.png

    03

    f0da980f2a0f1d42491844ec5a5217f6.png

    04

    196ba358812ab318d5aaa9bf9207a52b.png

    1. # 绘制所有预测图
    2. plt.plot(valpredPlot)

    0f30ee7e3efef77bfca69ae262721b52.png

    预测结果在平均方向准确性(MDA)、平均平方根误差(RMSE)和平均预测误差(MFE)的基础上与验证集进行比较。

    1. mda(Y_val, predictions)0.9090909090909091
    2. >>> mse = mean\_squared\_error(Y_val, predictions)
    3. >>> rmse = sqrt(mse)
    4. >>> forecast_error
    5. >>> mean\_forecast\_error = np.mean(forecast_error)

    e4ae4fa7672d51698bab84edcec65379.png

    8dc1f8d35da6311ff0835cefc2d26a45.png

    1b4859f7540d7ddd31f3601fa9e9be9a.png

    • MDA: 0.909

    • RMSE: 48.5

    • MFE: -1.77

    针对测试数据进行预测

    虽然验证集的结果相当可观,但只有将模型预测与测试(或未见过的)数据相比较,我们才能对LSTM模型的预测能力有合理的信心。

    如前所述,过去10个月的降雨数据被用作测试集。然后,LSTM模型被用来预测未来10个月的情况,然后将预测结果与实际值进行比较。

    5a7c960010fe1136605c7056bebc44ad.png

    至t-120的先前值被用来预测时间t的值。

    1. # 测试(未见过的)预测
    2. np.array(\[tseries.iloctseries.iloc,t

    获得的结果如下

    • MDA: 0.8

    • RMSE: 49.57

    • MFE: -6.94

    过去10个月的平均降雨量为148.93毫米,预测精度显示出与验证集相似的性能,而且相对于整个测试集计算的平均降雨量而言,误差很低。

    结论

    在这个例子中,你已经看到:

    • 如何准备用于LSTM模型的数据

    • 构建一个LSTM模型

    • 如何测试LSTM的预测准确性

    • 使用LSTM对不稳定的时间序列进行建模的优势

    数据获取

    在下面公众号后台回复“降雨量数据”,可免费获取完整数据。


    aec03ec972d2de8013da656d68f85a48.jpeg

    本文摘选《Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析》,点击“阅读原文”获取全文完整资料。

    b23c256d04030a71d0e26834ae1ad53c.jpeg

    本文中的降雨量数据分享到会员群,扫描下面二维码即可加群!

    c36d28cb28ea9495b1a0a4e1fe416cda.png

    c81165420d6c2b1ab309e7b785bbbd36.png

    点击标题查阅往期内容

    深度学习实现自编码器Autoencoder神经网络异常检测心电图ECG时间序列

    spss modeler用决策树神经网络预测ST的股票

    Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化

    RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

    结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

    深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

    用PyTorch机器学习神经网络分类预测银行客户流失模型

    PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

    Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

    R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化

    深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

    Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

    R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列

    R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感

    Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

    Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

    R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

    R语言深度学习:用keras神经网络回归模型预测时间序列数据

    Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

    R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

    MATLAB中用BP神经网络预测人体脂肪百分比数据

    Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

    R语言实现CNN(卷积神经网络)模型进行回归数据分析

    SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

    【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

    Python使用神经网络进行简单文本分类

    R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

    R语言基于递归神经网络RNN的温度时间序列预测

    R语言神经网络模型预测车辆数量时间序列

    R语言中的BP神经网络模型分析学生成绩

    matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

    R语言实现拟合神经网络预测和结果可视化

    用R语言实现神经网络预测股票实例

    使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

    python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

    用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

    e51f4cd2791dd3dd328d12f89af149ed.png

    f635d571eb7c5fac3667a3f5bd9cc9f6.jpeg

    378944ba3f226cdf960fa7d0301fe053.png

  • 相关阅读:
    动手学深度学习7.2 使用块的网络(VGG)-笔记&练习(PyTorch)
    【Java 基础篇】Java transient 关键字详解:对象序列化与非序列化字段
    多线程入门
    PASSWORD_VERIFY_FUNCTION 值 FROM ROOT 与default 的差异
    tmux的简单使用
    树莓派系统镜像备份
    MongoDB聚合运算符:$sampleRate
    花14天梳理了4月份各大厂问得最多的50道Java基础面试题
    等额本金和等额本息的区别
    Coursera Algorithm Ⅱ week3 baseball
  • 原文地址:https://blog.csdn.net/tecdat/article/details/132769904
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号