我是神经网络和机器学习的新手,我想知道您如何使用时间序列数据来设置常规 FNN 的权重,以及如何使用结束权重来预测时间序列。本质上,您如何将时间序列数据转换为权重并再次转换为输出。
使用神经网络进行时间序列分析
前馈神经网络(通常是多层)是一种有监督的学习器,它将以迭代的方式调整其输入和内部节点上的网络权重,以最大限度地减少预测和实际目标变量之间的误差。它通常在多次迭代中使用随机梯度下降(有时称为误差反向传播),以便找到误差响应的局部最小值并相应地优化网络权重。
随机梯度下降背后的基本思想是从随机化权重开始,然后通过迭代几次来调整权重,并在将目标误差和预测误差之间的总误差向梯度表面的局部最小误差移动的方向上更新权重。在实践中,在优化训练集和验证集之间进行权衡,以减少过度拟合的问题。
最后,输入(时间序列或其他)通常需要转换以创建一个固定序列,该序列也在 NN 层传递函数的输入范围(通常为 0 到 1 或-1 到 1)。
一旦训练了权重,就可以存储模型并用于处理额外的新时间序列数据,就像典型的基于线性回归的模型一样。
此处发布了使用 Weka 使用 NN 预测金融时间序列数据的示例说明:http: //intelligenttradingtech.blogspot.com/2010/01/systems.html
比较基于金融 AR 的模型与 NN 模型的一篇很好的文章是“Applied Quantitative Methods for Trading and Investment”,Christian Dunis 等人。
让我先回答你的问题,然后我会添加一些意见和建议。
首先,我相信当您说“重量”时,您实际上是指“输入”/“输出”。这是因为您询问了如何将时间序列转换为权重以及如何将输出权重转换为预测。神经网络术语使用“权重”来表示其他含义(pat 的答案正确使用了“权重”一词)。
这是人们通常建议的:如果你的时间序列看起来像
X_1, X_2, ..., X_n, ...
然后您执行以下操作:
第 1 步:决定要使用多少观察值来进行预测。
第 2 步:决定要预测的前进步数。
这两个选择对于 NN 都是固定的。
对于此示例,假设您想使用最后 5 个读数进行 2 个预测。
然后你会
步骤 3. 创建一个具有 5 个输入节点和 2 个输出节点的神经网络。
步骤 4. 创建您的训练集,每个元素包含 5 个连续读数作为输入,接下来的两个读数作为输出。
以下是训练集的前两个元素:
Input = X_1, X_2, X_3, X_4, X_5
Output = X_6, X_7
Input = X_2, X_3, X_4, X_5, X_6
Output = X_7, X_8
etc.
希望这能回答你的问题。
现在来一些gyan。
如果您的数据很嘈杂,例如股票报价,那么我的感觉是这将很难训练。我知道我在尝试用嘈杂的数据训练神经网络时运气不好。
所以这是另一个策略:
首先使用 ARIMA 框架对时间序列进行建模。这将时间序列视为
Polynomial base +
Cyclic component +
Bounded randomness
(从这个角度看一下 pat 的回答中的 Weka 示例。)
现在我的感觉(我仍在试验)是随机组件干扰了 NN 的训练。所以我想避免直接预测它们。
想象一下你的系列数据进来了。每次读数时,你都会把它输入你的 ARIMA 黑匣子,它会计算出底层模型,然后吐出 ARIMA 模型参数。所以在时间 0 你有一组参数,然后在时间 1 你有一组更新的参数,等等。
注意:ARIMA 黑匣子很慢。
问题 1:神经网络是否有可能学习这些参数如何变化?我的感觉是它们会慢慢改变,所以这可能是可行的。
问题 2:你能训练一个不同的神经网络来识别 ARIMA 错误中的任何模式吗?即如果 ARIMA 预测为 5.4,而实际的下一个读数是 5.5,你能训练一个神经网络来计算出 0.1 吗?
如果您可以访问 MATLAB 安装,请先尝试神经网络工具箱:http: //www.mathworks.com/help/toolbox/nnet/gs/f9-56659.html(查看屏幕截图)
它非常非常适合您要完成的工作,并且具有出色的文档。这是一个很好的起点。
有几种方法可以“训练”神经网络。就个人而言,我更喜欢遗传算法方法——每个个体代表一组权重,适应度函数是神经网络的性能。
神经网络在时间序列分析方面的性能可能是针对目标的预测的均方误差。使用神经网络进行时间序列预测的一种常用方法是使用“回溯”期间特定间隔的百分比变化。
您可能会发现这很有用 - http://ijcai.org/Past%20Proceedings/IJCAI-89-VOL1/PDF/122.pdf