python神经⽹络预测未来30天数据_使⽤LSTM循环神经⽹络的时间序列预测实例:预测未。。。
我们想⽤⼀个长短期记忆⽹络模型LSTM来讨论时间序列预测。这篇⽂章将告诉你如何利⽤时间序列分析来预测未来的货币汇率,并利⽤时间序列来进⾏机器学习。
序列问题
让我们从讨论序列问题开始。涉及序列的最简单的机器学习问题是⼀个“⼀对⼀”问题。
⼀对⼀
在这种情况下,我们对模型有⼀个张量或数据输⼊,模型⽤给定的输⼊⽣成⼀个预测。线性回归、分类,甚⾄是卷积⽹络的图像分类都属于这⼀类。我们可以扩展这个构想,使模型能够使⽤输⼊和输出的过去值。
它被认为是“⼀对多”问题。“⼀对多”问题是从“⼀对⼀”问题开始的。 “⼀对⼀”问题⽐如,我们把数据输⼊到模型,然后模型⽣成⼀个输出。但是,模型的输出现在反馈给模型作为⼀个新的输⼊。这个模型现在可以⽣成⼀个新的输出,我们可以⽆限地继续下去。现在你就可以知道为什么这些被称为递归神经⽹络(RNNs)。
⼀对多
python货币转换
⼀个递归的神经⽹络能够处理序列问题,因为它们的连接形成了⼀个有向的循环(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预测
模型的变化
在这个模型中可能会有很多变化使它变得更好。你可以始终尝试通过更改优化器来更改配置。我看到的另⼀个重要变化是通过使⽤滑动时间窗⼝⽅法,该⽅法来⾃于流数据管理系统。这种⽅法来⾃于⼀个观点,即只有最近的数据才是重要的。
⼀个⼈可以从⼀年的时间⾥展⽰模型数据,并试着对下⼀年的第⼀天做出预测。滑动时间窗⼝⽅法在获取数据集的重要模式⽅⾯⾮常有⽤,这些模式⾼度依赖于过去的⼤量观察。试着对这个模型做⼀些修改,看看模型对这些变化的反应。
数据集
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论