neurolab 中循环 Elman 网络的时间序列预测
Time series forecast with recurrent Elman network in neurolab
我使用 Elman recurrent network from neurolab 来预测连续值的时间序列。网络是根据一个序列训练的,输入是索引 i
处的值,目标是索引 i+1
.
处的值
为了预测 超越 紧接的下一个时间步长,网络的输出作为输入反馈。例如,如果我打算预测 i+5
处的值,我将按如下方式进行。
- 输入来自
i
的值
- 获取输出并将其提供给网络作为下一个输入值(例如
i+1
)
- 再重复 1. 到 3. 四次
- 输出是对
i+5
值的预测
因此,对于超出紧邻下一个时间步长的预测,必须使用先前激活的输出来激活循环网络。
然而,在大多数例子中,网络被提供了一个已经完整的序列。例如,参见上面 link 后面示例中的函数 train
and sim
。第一个函数使用已经完整的示例列表训练网络,第二个函数使用完整的输入值列表激活网络。
在 neurolab 中进行一些挖掘后,我发现函数 step
到 return 单个输入的单个输出。然而,使用 step
的结果表明,该函数不会保留对循环网络至关重要的循环层的激活。
如何在 neurolab 中使用单个输入激活循环 Elman 网络,使其在下一个单个输入激活时保持其内部状态?
事实证明,由前一个输出产生的输出迟早会收敛到一个常数值是很正常的。实际上,网络的输出不能只依赖于它之前的输出。
我得到相同的结果 - 不变。但是我注意到了一些事情:
-> 如果使用 0 和 1 数据,结果会有所改善。 0 - 减少 1 - 增加。结果不再是常数。
-> 尝试使用另一个变量来解释目标变量,正如我们的一位同事已经提到的那样。
我使用 Elman recurrent network from neurolab 来预测连续值的时间序列。网络是根据一个序列训练的,输入是索引 i
处的值,目标是索引 i+1
.
为了预测 超越 紧接的下一个时间步长,网络的输出作为输入反馈。例如,如果我打算预测 i+5
处的值,我将按如下方式进行。
- 输入来自
i
的值
- 获取输出并将其提供给网络作为下一个输入值(例如
i+1
) - 再重复 1. 到 3. 四次
- 输出是对
i+5
值的预测
因此,对于超出紧邻下一个时间步长的预测,必须使用先前激活的输出来激活循环网络。
然而,在大多数例子中,网络被提供了一个已经完整的序列。例如,参见上面 link 后面示例中的函数 train
and sim
。第一个函数使用已经完整的示例列表训练网络,第二个函数使用完整的输入值列表激活网络。
在 neurolab 中进行一些挖掘后,我发现函数 step
到 return 单个输入的单个输出。然而,使用 step
的结果表明,该函数不会保留对循环网络至关重要的循环层的激活。
如何在 neurolab 中使用单个输入激活循环 Elman 网络,使其在下一个单个输入激活时保持其内部状态?
事实证明,由前一个输出产生的输出迟早会收敛到一个常数值是很正常的。实际上,网络的输出不能只依赖于它之前的输出。
我得到相同的结果 - 不变。但是我注意到了一些事情:
-> 如果使用 0 和 1 数据,结果会有所改善。 0 - 减少 1 - 增加。结果不再是常数。
-> 尝试使用另一个变量来解释目标变量,正如我们的一位同事已经提到的那样。