神经网络和算法,预测过去的未来结果

时间:2012-10-30 04:05:56

标签: algorithm neural-network prediction

我正在研究一种算法,我给它一些输入,我给它们输出,并给出输出3个月(给或拿)我需要一种方法来查找/计算可能是未来的输出。
现在,给出的这个问题可能与证券交易所有关,我们给出了证明约束和某些结果,我们需要找到下一个。
我偶然发现了神经网络股票市场预测,你可以Google,或者你可以阅读它hereherehere

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

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

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

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

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

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

  • 我们的预测是正确的,结果与我们预测的相同。
  • 我们的预测失败了,结果与我们的预测不同。

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

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

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

我的最后一个问题是,有没有其他特殊的算法(对于这种事物/东西),我不知道?我应该使用而不是搞乱这种神经网络的东西?

最后,还有什么,我可能会失踪,可能会导致我(而不是我正在做的算法)预测输出,我的意思是任何警告,或任何可能使我错过的东西,我可能会失踪?

3 个答案:

答案 0 :(得分:25)

作为您问题的答案,还有很多要说的。实际上,您的问题通常涉及时间序列预测的问题,以及神经网络应用于此任务的问题。我在这里只写了几个最重要的键,但在阅读完之后你应该深入研究Google的查询结果time series prediction neural network。有很多作品详细介绍了这些原则。还存在各种软件实现(包含源代码)(here is just one of examples with codes in c++)。

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

2)很少有输入/输出值严格适合特定区域。现实生活中的数据可以被视为绝对值无限制(即使它的变化似乎产生了一个通道,它可以在一瞬间被分解),但神经网络只能在稳定的条件下运行。这就是为什么数据通常首先转换为增量(通过计算第i个点和i-1之间的增量,或从它们的比率中取log)。无论如何,我建议您使用您的数据,尽管您声明它在[0,100]区域内。如果你不这样做,神经网络很可能会退化为一个所谓的天真预测器,它产生一个预测值,每个下一个值等于之前的值。

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

3)您应该向NN提供从sliding window日期获得的输入数据。例如,如果您有一年的数据且每个点都是一天,您应该选择窗口的大小 - 例如,一个月 - 并从过去到未来逐日滑动。刚好在窗口右边界的那一天是NN的目标输出。这是一个非常简单的方法(有更复杂的方法),我之所以提到它只是因为你问如何处理连续到达的数据。答案是 - 您不需要每天更换/扩大您的NN。只需使用具有固定窗口大小的常量结构并“忘记”(不向NN提供)最旧的点。重要的是,您不要将所有数据视为单个输入,而是将其划分为许多小向量并在其上训练NN,因此网络可以推广数据并找到规律性。

4)滑动窗口的大小是您的NN输入大小。输出大小为1.您应该使用隐藏的图层大小来发现更好的性能。从输入和输出之间的值开始,例如sqrt(in * out)。

根据最新研究,Recurrent Neural Networks似乎对时间序列预测的任务运作得更好。

答案 1 :(得分:6)

我同意斯坦的说法

  

1)我必须说数据预处理的问题是99%

我已经将神经网络应用了25年以上用于各种航空航天应用,包括直升机飞行控制 - 设置输入/输出数据集就是一切 - 所有其他都是次要的。

我很惊讶,在smirkman的评论中,神经网络被迅速放弃“因为它们没有产生任何有价值的东西” - 这告诉我,使用神经网络的人几乎没有经验。

鉴于该主题讨论了神经网络股票市场预测 - 我会说我已经使它成功了。测试结果可从我的网站www.nwtai.com下载。

我不会泄露它是如何完成的,但是有足够的有趣数据可以让你更加认真地使用神经网络进行探索。

答案 2 :(得分:2)

成千上万想赢取1M $ NetFlix prize的人对这类问题进行了特别好的研究。

之前的提交通常基于K Nearest Neigbours。之后的提交是使用Singular Value DecompositionSupport Vector MachinesStochastic Gradient Descent进行的。获胜者使用了几种技术的混合。

阅读优秀的Community forums将为您提供有关预测过去未来的最佳方法的许多见解。您还可以找到不同方法的大量源代码。

有趣的是,神经网络迅速被丢弃,因为它们没有产生任何有价值的东西(我个人还没有看到一个非平凡的NN产生任何有价值的东西)。

如果你刚开始,我会建议将SVD作为第一条道路;它很容易制作,并且经常会产生令人惊讶的数据洞察力。

祝你好运!