algorithm - 神经网络和算法,预测过去的 future 结果

标签 algorithm neural-network prediction

我正在研究一种算法,我得到了一些输入并得到了它们的输出,并给出了 3 个月的输出(给予或接受)我需要一种方法来查找/计算 future 的输出.
现在,给定的这个问题可能与证券交易有关,我们有一定的约束条件和一定的结果,我们需要找到下一个。
我偶然发现了神经网络股市预测,你可以Google它,或者你可以阅读它 here , herehere .

为了开始制作算法,我无法弄清楚层的结构应该是什么。
给定的约束是:

  • 输出总是整数。
  • 输出总是在 1 到 100 之间。
  • say 没有确切的输入,就像股票市场一样,我们只知道股票价格会在 1 和 100 之间波动,所以我们可能(或不?)认为这是唯一的输入。
  • 我们有最近 3 个月(或更长时间)的记录。

现在,我的第一个问题是,我需要多少个节点作为输入?

输出只有一个,很好。但正如我所说,我是否应该为输入层取 100 个节点(假定股票价格始终是整数并且总是 btw 1 和 100?)

隐藏层呢?有多少个节点?比如说,如果我也在那里使用 100 个节点,我认为这不会对网络进行太多训练,因为我认为对于每个输入,我们还需要考虑所有以前的输入。

比如说,我们正在计算第 4 个月的第 1 天的输出,我们应该在隐藏层/中间层有 90 个节点(为简单起见,假设每个月为 30 天)。现在有两种情况

  • 我们的预测是正确的,结果也和我们预测的一样。
  • 我们的预测失败了,结果与我们预测的不同。

无论如何,现在当我们计算第 4 个月第 2 天的输出时,我们不仅需要那 90 个输入,还需要最后一个结果(而不是预测,如果相同的话!),所以我们现在在中间/隐藏层中有 91 个节点。

依此类推,它会不断增加每天的节点数量,AFAICT。

所以,我的另一个问题是,如果动态变化,我该如何定义/设置隐藏层/中间层中的节点数。

我的最后一个问题是,是否还有我不知道的其他特定算法(对于这种事情/东西)?我应该使用它而不是摆弄这些神经网络的东西?

最后,有什么我可能遗漏的东西可能会导致我(而不是我正在制作的算法)预测输出,我的意思是任何警告,或者任何可能导致我可能遗漏的错误的东西?

最佳答案

您的问题的答案有很多。事实上,您的问题解决了一般时间序列预测的问题,以及神经网络在该任务中的应用。我在这里只写了几个最重要的关键,但在阅读本文之后,您可能应该深入了解 Google 的查询结果 time series prediction neural network。有很多作品详细介绍了原理。也存在各种软件实现(带有源代码)( here is just one of examples with codes in c++ )。

1) 我必须说,问题 99% 与数据预处理和选择正确的输入/输出因素有关,只有 1% 与使用的具体仪器有关,无论是神经网络还是其他。附带说明一下,神经网络可以在内部实现大多数其他数据分析方法。例如,您可以使用神经网络进行主成分分析 (PCA),它与另一个答案中提到的 SVD 密切相关。

2) 输入/输出值严格符合特定区域的情况非常罕见。现实生活中的数据可以认为是绝对值无界的(即使它的变化看起来产生了 channel ,也可以在一瞬间分解),但神经网络只能在稳定的条件下运行。这就是为什么数据通常首先转换为增量(通过计算第 i 个点和 i-1 之间的增量,或者从它们的比率中获取 log)。我建议你还是用你的数据来做,尽管你声明它在 [0, 100] 区域内。如果不这样做,神经网络很可能会退化为所谓的朴素预测器,它会生成每个下一个值都等于前一个值的预测。

然后数据被归一化为 [0, 1] 或 [-1, +1]。第二种适用于时间序列预测的情况,其中 +1 表示向上移动,-1 - 向下移动。对网络中的神经元使用 hypertanh 激活函数。

3) 您应该向 NN 提供从日期的滑动窗口获得的输入数据。例如,如果你有一年的数据,每个点都是一天,你应该选择窗口的大小——比如一个月——然后一天一天地滑动它,从过去到 future 。恰好位于窗口右边界的那一天是 NN 的目标输出。这是一种非常简单的方法(还有更复杂的方法),我提到它只是因为你问如何处理连续到达的数据。答案是——您不需要每天更改/扩大您的神经网络。只需使用具有固定窗口大小的常量结构并“忘记”(不向神经网络提供)最旧的点。重要的是不要将所有数据都视为单一输入,而是将其分成许多小向量并在其上训练神经网络,这样网络就可以概括数据并找到规律性。

4) 滑动窗口的大小就是你的神经网络输入大小。输出大小为 1。您应该调整隐藏层大小以获得更好的性能。从输入和输出之间的某个值开始,例如 sqrt(in*out)。

根据最新研究,Recurrent Neural Networks似乎更适合时间序列预测任务。

关于algorithm - 神经网络和算法,预测过去的 future 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132493/

相关文章:

machine-learning - 为什么 ANN 中需要 BIAS?我们应该为每一层设置单独的 BIAS 吗?

machine-learning - 根据文本字段预测文本字段

c++ - 最短路径与最小生成树的结合

multithreading - 互斥算法是否需要原子加载和存储?

algorithm - 了解在数组中查找重复项背后的概念

machine-learning - 我可以使用 `tf.nn.dropout`来实现DropConnect吗?

algorithm - 是否可以构建一个后缀或前缀形式的树?

machine-learning - 预训练如何改善神经网络的分类?

python - KNN - 在 python 中预测单个案例

model - Tensorflow Slim 恢复模型并预测