如何将神经网络应用于时间序列预测?


83

我是机器学习的新手,我一直在尝试找出如何将神经网络应用于时间序列预测。我发现了与查询有关的资源,但似乎仍然有些迷茫。我认为没有太多细节的基本解释会有所帮助。

假设我在几年中每个月都有一些价格值,并且我想预测新的价格值。我可以获取过去几个月的价格列表,然后尝试使用K-Nearest-Neighbor查找过去的类似趋势。我可以让他们使用变化率或过去趋势的其他属性来尝试预测新价格。我正在尝试找出如何将神经网络应用于相同的问题。




@solartic,很好奇,您是否成功实现了此方法?
下垂的海牛和天鹅民俗

Answers:


102

这是一个简单的食谱,可以帮助您开始编写代码和测试想法。

假设您有几年记录的每月数据,那么您有36个值。我们还假设您只关心预先预测一个月(值)。

  1. 探索性数据分析:应用一些传统的时间序列分析方法来估计数据中的滞后依赖性(例如,自相关和部分自相关图,变换,差分)。假设您发现给定月份的值与过去三个月的数据相关,但与之相差无几。
  2. 将您的数据分为训练和验证集:将前24个点作为训练值,将其余点作为验证集。
  3. 创建神经网络布局:您将过去三个月的值作为输入,并希望预测下个月的值。因此,您需要一个神经网络,其输入层包含三个节点,输出层包含一个节点。您可能应该具有一个至少包含两个节点的隐藏层。不幸的是,没有明确的指导方针来选择隐藏层的数量以及它们各自的节点数量。我将从3:2:1开始。
  4. 创建训练模式:每个训练模式将是四个值,前三个对应于输入节点,最后一个定义输出节点的正确值。例如,如果您的训练数据是值则
    x1,x2,x24
    pattern1:x1,x2,x3,x4
    pattern2:x2,x3,x4,x5
    pattern21:x21,x22,x23,x24
  5. 在这些模式上训练神经网络
  6. 在验证集上测试网络(25-36个月):在这里,您将传入神经网络输入层所需的三个值,并查看将输出节点设置为哪个值。因此,要查看受过训练的神经网络如何很好地预测第32个月的值,您需要传递第29、30和31个月的值

这个秘诀显然是高水平的,当您尝试将上下文映射到不同的软件库/程序时,您可能首先会抓狂。但是,希望这能勾勒出要点:您需要创建训练模式,以合理地包含您要预测的序列的相关结构。无论您是使用神经网络还是ARIMA模型进行预测,确定该结构是什么的探索工作通常都是最耗时且最困难的部分。

以我的经验,神经网络可以提供出色的分类和预测功能,但是设置它们会很耗时。在上面的示例中,您可能会发现21种训练模式还不够。不同的输入数据转换导致更好/更坏的预测;改变隐藏层和隐藏层节点的数量会大大影响预测;等等

我强烈建议访问Neuro_forecasting网站,其中包含有关神经网络预测比赛的大量信息。该动机页面是非常有用的。


12
对该答案+1,但还要补充一点,即使最近3个月是唯一与该答案相关的月份,也可能有一些因素,例如前5年中的每年同月是有用的输入(例如,如果通常12月看起来像以前的12月)。
rossdavidh 2011年

1
好答案。我发现这非常有帮助。高层次的解释正是我想要的。@rossdavidh:好点+1。
solartic

2
在这里获得一些示例代码将是很棒的。
莱奥波德·赫兹(LéoLéopoldHertz),2016年

1
有趣的事情会一起是多元时间序列数据集回归系数..
托马索·里尼

1
有人知道某些纸可以应用于真实数据,并且可以与“传统”时间序列方法进行比较吗?
Marco Fumagalli
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.