Python中利用LSTM模型进行时间序列预测分析

时间序列模型

时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。
举个栗子:根据过去两年某股票的每天的股价数据推测之后一周的股价变化;根据过去2年某店铺每周想消费人数预测下周来店消费的人数等等

RNN 和 LSTM 模型

时间序列模型最常用最强大的的工具就是递归神经网络(recurrent neural network, RNN)。相比与普通神经网络的各计算结果之间相互独立的特点,RNN的每一次隐含层的计算结果都与当前输入以及上一次的隐含层结果相关。通过这种方法,RNN的计算结果便具备了记忆之前几次结果的特点。

典型的RNN网路结构如下:

右侧为计算时便于理解记忆而产开的结构。简单说,x为输入层,o为输出层,s为隐含层,而t指第几次的计算;V,W,U为权重,其中计算第t次的隐含层状态时为St = f(U*Xt + W*St-1),实现当前输入结果与之前的计算挂钩的目的。对RNN想要更深入的了解可以戳这里

RNN的局限:
由于RNN模型如果需要实现长期记忆的话需要将当前的隐含态的计算与前n次的计算挂钩,即St = f(U*Xt + W1*St-1 + W2*St-2 + ... + Wn*St-n),那样的话计算量会呈指数式增长,导致模型训练的时间大幅增加,因此RNN模型一般直接用来进行长期记忆计算。

LSTM模型
LSTM(Long Short-Term Memory)模型是一种RNN的变型,最早由Juergen Schmidhuber提出的。经典的LSTM模型结构如下:

LSTM的特点就是在RNN结构以外添加了各层的阀门节点。阀门有3类:遗忘阀门(forget gate),输入阀门(input gate)和输出阀门(output gate)。这些阀门可以打开或关闭,用于将判断模型网络的记忆态(之前网络的状态)在该层输出的结果是否达到阈值从而加入到当前该层的计算中。如图中所示,阀门节点利用sigmoid函数将网络的记忆态作为输入计算;如果输出结果达到阈值则将该阀门输出与当前层的的计算结果相乘作为下一层的输入(PS:这里的相乘是在指矩阵中的逐元素相乘);如果没有达到阈值则将该输出结果遗忘掉。每一层包括阀门节点的权重都会在每一次模型反向传播训练过程中更新。更具体的LSTM的判断计算过程如下图所示:

LSTM模型的记忆功能就是由这些阀门节点实现的。当阀门打开的时候,前面模型的训练结果就会关联到当前的模型计算,而当阀门关闭的时候之前的计算结果就不再影响当前的计算。因此,通过调节阀门的开关我们就可以实现早期序列对最终结果的影响。而当你不不希望之前结果对之后产生影响,比如自然语言处理中的开始分析新段落或新章节,那么把阀门关掉即可。(对LSTM想要更具体的了解可以戳这里)
下图具体演示了阀门是如何工作的:通过阀门控制使序列第1的输入的变量影响到了序列第4,6的的变量计算结果。

黑色实心圆代表对该节点的计算结果输出到下一层或下一次计算;空心圆则表示该节点的计算结果没有输入到网络或者没有从上一次收到信号。

Python中实现LSTM模型搭建

Python中有不少包可以直接调用来构建LSTM模型,比如pybrain, kears, tensorflow, cikit-neuralnetwork等(更多戳这里)。这里我们选用keras。(PS:如果操作系统用的linux或者mac,强推Tensorflow!!!)

因为LSTM神经网络模型的训练可以通过调整很多参数来优化,例如activation函数,LSTM层数,输入输出的变量维度等,调节过程相当复杂。这里只举一个最简单的应用例子来描述LSTM的搭建过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【课题总结】OpenCV 抠图项目实战(3)抠图综述

Python 小白的课题报告—OpenCV 抠图项目实战(3)抠图综述 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是,本系列并不能算是 OpenCV 的抠图项目教程,只是以此为主题的课题报告。其中包括了一个较…

随机数验证码

由字母和数字组成的验证码,点击验证码图片或者换一张时验证码会随机生成。 程序解读 字母和数字的组合图片和换一张文字的点击样式随机生成验证码判断是否正确正确之后弹框提示 效果演示 原始样式 点击验证码图片或者换一张字样时随机生成新的验证码 输入错误…

【课题总结】OpenCV 抠图项目实战(4)固定阈值抠图

Python 小白的课题报告—OpenCV 抠图项目实战(4)固定阈值抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是,本系列并不能算是 OpenCV 的抠图项目教程,只是以此为主题的课题报告。其中包括了一…

数学公式验证码

给出简单的数学算法&#xff08;加减法运算&#xff09;&#xff0c;计算结果为验证码。 效果演示 原始样式 点击换一张或者点击验证码图片的时候随机生成新的数学验证码 输入错误的验证码 输入正确的验证码 代码演示 注意&#xff1a;引入两个架包 <script type&qu…

【课题总结】OpenCV 抠图项目实战(5)自适应阈值抠图

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;5&#xff09;自适应阈值抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了…

滑动验证

拖动滑块进行验证码的验证。 滑动验证有两种&#xff1a; 图片滑动验证长方形的滑动条验证 一 &#xff1a; 图片滑动验证 效果演示 原始样式 没有正确验证的时候滑块会直接回到初始位置让你再次滑动验证 验证成功会给出提示 看代码之前**注意&#xff1a;**代码中要引…

Feedback Prize-Kaggle比赛调研

1.比赛调研 1.1 比赛链接 Feedback Prize - Predicting Effective Arguments | Kaggle 1.2 比赛周期 5.24-8.23 1.3 比赛的快速介绍 本次比赛的目标是将学生写作中的争论元素分类为“有效”、“充分”或“无效”。您将创建一个使用代表美国 6 至 12 年级人口的数据进行训…

【课题总结】OpenCV 抠图项目实战(6)色彩范围抠图

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;6&#xff09;色彩范围抠图 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一…

点选验证码

根据图片下方文字提示点击图片验证码对应的文字完成验证。 效果演示 原始样式 点击文字错误时 点击验证成功 在欣赏代码之前**注意&#xff1a;**引入两个架包 <script type"text/javascript" src"js/jquery.min.js"></script> <scri…

【课题总结】OpenCV 抠图项目实战(7)边缘检测

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;7&#xff09; 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个较为完整的…

一文带你了解美国运通比赛

1.比赛调研 1.1 比赛链接 American Express - Default Prediction | Kaggle 1.2 比赛周期 8.24截止 1.3 比赛的快速介绍 无论是在餐厅外出还是购买音乐会门票&#xff0c;现代生活都依靠信用卡的便利进行日常购物。它使我们免于携带大量现金&#xff0c;还可以提前全额购…

【python】Ubuntu下安装spyder及matplotlib中文显示

一、查看Ubuntu版本 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy尝试用cat /etc/debian_version命令&#xff0c;竟然可以显示出来Debian的版本。 $ cat /etc/debian_version …

【课题总结】OpenCV 抠图项目实战(8)图像轮廓

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;8&#xff09; 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个较为完整的…

SQLServer 联合查询

联合查询分为内连接和外连接两个 一&#xff1a; 外连接又分为&#xff1a;左连接、右连接、完全外连接。 1. 左连接 left join或 left outer join SQL语句&#xff1a; select * from student left join course student .IDcourse.ID语句解说&#xff1a;左外连接包含left …

H5 五子棋小游戏

用H5实现双人五子棋小游戏。 功能分解&#xff1a; 棋盘的大小自己设置白色棋子和黑色棋子的点击事件有棋子的地方不能再次放棋子判断同色棋子是否够五个够五个之后弹框显示胜利 效果演示 原始样式 选择之后开始游戏 有没有一种特别好玩的感觉呢&#xff1f;&#xff1f;…

【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;10&#xff09;PyQt5 使用 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个…

IDEA 生成get和set方法

使用IDEA自动生成get和set方法。 在IDEA中使用快捷键altinsert. 图解示例 要生成get和set的页面 使用altinsert快捷键 点击Getter and Setter 全部选中 点击ok之后get和set方法就自动生成了

【课题总结】OpenCV 抠图项目实战(11)算法实验平台

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;11&#xff09;抠图算法实验平台 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括…

IDEA 配置Tomcat

在IDEA上配置本地的Tomcat服务。 1.点击右上角如图红色圆圈圈中的Add Configuration… 2. 点击号 3. 向下查找Tomcat Server, 然后选择Local (如果没有Tomcat Server 点击33more items… 就能找到了) 4. 点击Local之后&#xff08;我的是已经配置过的&#xff0c;如果没有配…

【课题总结】OpenCV 抠图项目实战(12)源程序代码

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;12&#xff09;源程序代码 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个…