Statsbot团队发表过一篇关于使用时间序列分析来进行异常检测的文章。文章地址:https://blog.statsbot.co/time-series-anomaly-detection-algorithms-1cef5519aef2

我们想用一个长短期记忆网络模型LSTM来讨论时间序列预测。这篇文章将告诉你如何利用时间序列分析来预测未来的货币汇率,并利用时间序列来进行机器学习。

序列问题

让我们从讨论序列问题开始。涉及序列的最简单的机器学习问题是一个“一对一”问题。

一对一

在这种情况下,我们对模型有一个张量或数据输入,模型用给定的输入生成一个预测。线性回归、分类,甚至是卷积网络的图像分类都属于这一类。我们可以扩展这个构想,使模型能够使用输入和输出的过去值。

它被认为是“一对多”问题。“一对多”问题是从“一对一”问题开始的。 “一对一”问题比如,我们把数据输入到模型,然后模型生成一个输出。但是,模型的输出现在反馈给模型作为一个新的输入。这个模型现在可以生成一个新的输出,我们可以无限地继续下去。现在你就可以知道为什么这些被称为递归神经网络(RNNs)。

一对多

一个递归的神经网络能够处理序列问题,因为它们的连接形成了一个有向的循环(directed cycle)。换句话说,它们可以通过使用自己的输出作为下一个步骤的输入来保持状态从一个迭代到下一个迭代。在编程术语中,这就像运行一个带有特定输入和内部变量的固定程序。如果我们将时间轴展开(unroll),那么最简单的递归神经网络可以被看作是一个完全连接的神经网络。

RNN展开时间

在这个单变量的例子中,只有两个权重。权重乘以当前的输入xt,即u,并且权重和之前的输出yt-1相乘,也就是w。这个公式就像指数加权移动平均值(EWMA),通过它的输出过去值来做输入的当前值。

我们可以简单地通过把单元堆叠在一起来建立一个深层的神经网络。一个简单的递归神经网络只适用于短期记忆。我们会发现,如果我们有更长的时间依赖,它就会从根本问题受到困扰。

时间序列预测

我对一个递归神经网络的优势印象深刻,并决定用它们来预测美元和印度卢比之间的汇率。这个项目使用的数据集是基于1980年1月2日到2017年8月10日之间的汇率数据。稍后,我将给你一个下载这个数据集的链接并进行实验。

表格1.数据集的例子

数据集显示在卢比中1美元的值。自1980年1月2日到2017年8月10日以来,我们总共有13730份记录。

USD vs INR

在此期间,用卢比买1美元卢比的价格一直在上涨。可以看到,在2007-2008年期间,美国经济出现了巨大的下滑,这在当时的大衰退中是巨大的。在2000年代末和2010年初,全球市场普遍出现了普遍的经济衰退。

Train-Test Split

现在,为了训练机器,我们需要将数据集划分为测试和训练集。当你进行时间序列的分离(split)训练和测试的时候,这是非常重要的。因此,你一定不希望你的测试数据出现在训练数据之前。在我们的实验中,我们将定义一个日期,比如2010年1月1日,作为我们的分离日期。

训练数据是基于1980年1月2日到2009年12月31日之间的数据,大约有11000个训练数据点。测试数据集是在2010年1月1日到2017年8月10日之间,大约有2700个点。

Train-Test Split

接下来要做的事情是将数据集标准化。你只需要匹配和转换你的训练数据,并转换你的测试数据。这么做的原因是你不想假定你知道你的测试数据的规模。标准化或转换数据意味着新的规模变量(scale variable)将在0到1的范围之间。

神经网络模型

一个完全连接的模型是一个简单的神经网络模型,它被构建为一个简单的回归模型。

作为一个损失函数,我们使用平均平方误差和随机梯度下降作为优化器,在具备充足的时间之后,我们将尝试寻找一个好的局部优化。下面是完整连接层的总结。

完整连接层的总结

在对200个epoch或early_callbacks进行了训练之后,模型都尝试了解数据的模式和行为。由于我们将数据分成训练和测试集,我们现在可以预测测试数据的值,并将它们与实际情况进行比较。

正如你所看到的,下面这个模型并不好。它本质上是在重复之前的值并且有一个微小的变化。完全连接的模型不能从单一的前一个值来预测未来。现在让我们尝试使用一个递归的神经网络,看看它的效果如何。

地面实况(蓝色)和预测(橙色)

长短期记忆网络

我们所使用的递归模型是一个层连续的模型。我们在层中使用了6个LSTM节点,我们给它输入形态设置为(1,1)。

LSTM模型的总结

最后一层是一个密集层,其中的损失是平均平方误差和随机梯度下降作为优化器。我们对这个模型进行了200个epochs的训练,并进行了early_stopping回调。这个模型的总结显示在上面。

这个模型已经学会了重现数据的全年的形态,并且没有它过去使用一个简单的前馈神经网络的延迟。它仍然低估了某些观测值,而且在这个模型中肯定还有改进的空间。

LSTM预测

模型的变化

在这个模型中可能会有很多变化使它变得更好。你可以始终尝试通过更改优化器来更改配置。我看到的另一个重要变化是通过使用滑动时间窗口方法,该方法来自于流数据管理系统。这种方法来自于一个观点,即只有最近的数据才是重要的。

一个人可以从一年的时间里展示模型数据,并试着对下一年的第一天做出预测。滑动时间窗口方法在获取数据集的重要模式方面非常有用,这些模式高度依赖于过去的大量观察。试着对这个模型做一些修改,看看模型对这些变化的反应。

数据集

python 神经网络预测未来30天数据_使用LSTM循环神经网络的时间序列预测实例:预测未来的货币汇率...相关推荐

  1. 通过keras例子理解LSTM 循环神经网络(RNN)

    博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...

  2. 自然语言处理--Keras 实现LSTM循环神经网络分类 IMDB 电影评论数据集

    LSTM 对于循环网络的每一层都引入了状态(state)的概念,状态作为网络的记忆(memory).但什么是记忆呢?记忆将由一个向量来表示,这个向量与元胞中神经元的元素数量相同.记忆单元将是一个由 n ...

  3. 用c语言实现循环神经网络,浅谈LSTM循环神经网络

    姓名:程祖晗 学号:19021210938 [嵌牛导读]人工神经网络(ANN)由大量相互连接的神经元或称节点组成,这些节点经过网络中的大量加权连接,将数据进行相互通信,实现了神经网络的记忆特性.在常规 ...

  4. 如何解决LSTM循环神经网络中的超长序列问题

    时间 2017-06-27 15:57:39  机器之心 原文  https://www.jiqizhixin.com/articles/e8d4e413-a718-49ac-ae79-c197ba8 ...

  5. 利用python爬取58同城简历数据_利用python爬取58同城简历数据-Go语言中文社区

    利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用python里面的scrapy框架制作爬虫.但 ...

  6. 时序数据采样、原始循环神经网络RNN、RNN梯度爆炸原因推导

    时序数据的采样 随机采样 每个样本是原始序列上任意截取的一段序列.相邻的两个随机小批量在原始序列上的位置不一定相毗邻.因此,我们无法用一个小批量最终时间步的隐藏状态来初始化下一个小批量的隐藏状态.在训 ...

  7. Python手撸机器学习系列(十六):循环神经网络RNN的实现

    目录 循环神经网络RNN 1.公式推导 2.代码实现 循环神经网络RNN 1.公式推导 对于该循环神经网络,以中间的RNN单元为例,推导前向传播: 对于Layer-1: z h = w i x + w ...

  8. 利用循环神经网络生成唐诗_PyTorch实现用于文本生成的循环神经网络

    自然语言处理(NLP)有很多有趣的应用,文本生成就是其中一个有趣的应用. 当一个机器学习模型工作在诸如循环神经网络.LSTM-RNN.GRU等序列模型上时,它们可以生成输入文本的下一个序列. PyTo ...

  9. python登录网站后爬取数据_用 Python 登录主流网站,我们的数据爬取少不了它

    不论是自然语言处理还是计算机视觉,做机器学习算法总会存在数据不足的情况,而这个时候就需要我们用爬虫获取一些额外数据.这个项目介绍了如何用 Python 登录各大网站,并用简单的爬虫获取一些有用数据,目 ...

最新文章

  1. ICLR 2019高分论文抢先看,谁是第一?
  2. 谢烟客---------Linux之文件安全上下文及特殊权限位
  3. [Voice communications] 让音乐响起来
  4. OSS全球传输加速开启公测,助力企业业务全地域覆盖...
  5. MATLAB中nargin 的用法
  6. linux下网络排错与查看
  7. FPGA实现OV5640摄像头及RGB图像数据采集
  8. mysqlfront连接MySQL错误_使用MySql-Front远程连接MySQL失败的解决办法
  9. 阿里千亿级购物节背后,淘宝智能客服架构演进之路
  10. js define函数_不夸张,这真的是前端圈宝藏书!360前端工程师Vue.js源码解析
  11. 多核环境下pthread调度执行bthread的过程
  12. 一个女算法程序媛的日常
  13. zabbix 添加 host item
  14. 探索线程安全背后的本质——volatile
  15. Silverlight for Windows Phone 7开发系列(1):环境搭建
  16. 使用URLOS在linux系统中极速部署NFS共享存储服务
  17. [Python]通过有道词典API获取单词发音MP3
  18. ArcGIS数据生产与精细化制图之中国年降水量分布图的制作(转载)
  19. @Secured()、 @PreAuthorize() 、 @RolesAllowed()
  20. 总结证书CT:证书透明度

热门文章

  1. ref改变样式 vue_vue.js对样式的具体操作详解
  2. 微信小程序获取微信绑定授权手机号
  3. FastStone.MaxView.2.keygen-REPT
  4. css3的坐标轴是相对于电脑屏幕还是物体自身?
  5. android_54a3,碉堡了,连神画Y1投影仪都可以跑android大型游戏N.0.V.A3
  6. 利用计算机开方洋葱数学,他借助“洋葱数学”实现学讲模式
  7. 【转载】Ubuntu完全教程,让你成为Ubuntu高手!
  8. 第八届中国大学计算机设计大赛,2015年(第八届)中国大学生计算机设计大赛.PDF...
  9. [英语阅读]2010年内衣新宠:抗皱文胸
  10. 【Kafka】Kafka消费者相关策略