使用递归神经网络进行时间序列预测

时间:2016-05-12 21:27:56

标签: machine-learning neural-network time-series regression recurrent-neural-network

根据输入,我使用Bike Sharing dataset来预测一天的租金数量。我将使用2011年的数据来训练和2012年的数据进行验证。我成功建立了一个线性回归模型,但现在我试图找出如何使用递归神经网络预测时间序列。

数据集有10个属性(例如月份,工作日或不工作日,温度,湿度,风速),所有数字,但属性为日(星期日:0,星期一:1等)。

我假设有一天能够并且可能取决于前几天(并且我不需要所有10个属性),所以我想到了使用RNN。我不太了解,但我读了一些东西,还this。我想到这样的结构。

我将10 input neuronsa hidden layer1 output neuron。我不知道如何决定隐藏层有多少神经元。

我想我需要一个矩阵将输入层连接到隐藏层,一个矩阵将隐藏层连接到输出层,一个矩阵用于连接相邻时间步骤t-1到{{1}的隐藏层},tt。这总共有3个矩阵。

在一个教程中,激活函数是t+1,虽然我不确定,如果我使用sigmoid函数,我只会在0和1之间输出。我应该使用什么作为激活函数?我的计划是重复sigmoid次:

  • 对于每个培训数据:
    • 转发宣传
      • 将输入传播到隐藏图层,将其添加到先前隐藏图层到当前隐藏图层的传播中。并将其传递给激活功能。
      • 传播隐藏图层以进行输出。
      • 查找错误及其派生词,将其存储在列表中
    • 反向传播
      • 从列表
      • 中查找当前图层和错误
      • 查找当前隐藏图层错误
      • 存储重量更新
    • 通过将权重(矩阵)乘以学习率来更新权重(矩阵)。

这是正确的方法吗?我想要实数数值作为输出,而不是0-1之间的数字。

1 个答案:

答案 0 :(得分:1)

如果您只是想学习基础知识,这似乎是正确的方法。如果你想建立一个实际使用的神经网络,这是一个非常糟糕的方法,正如Marcin的评论所说的那样,几乎所有构建神经网络用于实际应用的人都是通过使用具有现成神经网络模拟的软件包来实现的。让我逐一回答你的问题......

  1. 我不知道如何决定隐藏图层会有多少神经元。
  2. 为您的神经网络选择正确的架构没有黄金法则。人们已经根据经验建立了许多经验规则,并且通过尝试各种组合并比较输出来确定正确数量的神经元。一个很好的起点是(输入加输出神经元的3/2倍,即(10 + 1)*(3/2)...所以你可以从隐藏层中的15/16神经元开始,然后继续根据您的输出减少数量。)

    1. 我应该使用什么作为激活功能?
    2. 同样,没有“正确”的功能。这完全取决于适合您的数据的内容。此外,有许多类型的sigmoid函数,如双曲正切,逻辑,RBF等。一个好的起点是逻辑函数,但同样你只能通过反复试验找到正确的函数。

      1. 这是正确的方法吗?我想要实数数值作为输出,而不是0-1之间的数字。
      2. 所有激活函数(包括分配给输出神经元的函数)将为您提供0到1的输出,并且您必须使用乘数将其转换为实数值,或者使用多种输出神经元进行某种编码。手动编码会很复杂。

        要考虑的另一个方面是你的训练迭代。这样做'n'并没有帮助。您需要通过反复试验找到最佳训练迭代,以避免不合适和过度拟合。

        正确的方法是使用Python或R中的包,这将允许您快速训练具有大量自定义的神经网络,在那里您可以训练和测试具有不同激活功能的多个网络(甚至不同训练算法)和网络架构没有太多麻烦。通过一定量的反复试验,您最终会找到能够提供理想输出的网络。