简单的 MLP 时间序列训练产生意想不到的平均线结果

Simple MLP time series training yields unexpeced mean line results

我正在尝试进行简单的时间序列预测。给定输入数量(1 分钟刻度)Net 应该尝试预测下一个。我用不同的设置训练了 3 个网络来说明我的问题:

在右侧,您可以看到 3 个训练器 MLP - 随机命名和颜色编码,以及一些训练统计数据。左侧 - 由这些网络做出的预测图和白色的实际验证数据。该图是通过遍历验证数据的每个刻度(白色),将 30|4|60 (Nancy|Kathy|Wayne) 个先前的刻度输入网络并绘制它将在当前刻度位置预测的内容而绘制的。

多层感知器的设置(Nancy|Kathy|Wayne 设置):

几何:2x30|4|60 个输入节点 -> 30|4|60 个隐藏层节点 -> 2 个输出
纪元数:10|5|10
学习率:0.01
动量:0.5|0.9|0.5
非线性:校正
损失:平方误差

似乎随着更多训练的应用 - 预测正在收敛到某种平均线,这根本不是我所期望的。我期待预测与验证数据有点接近,但有一些误差。
我是否选择了错误的模型、误解了机器学习的一些核心概念或在 lasagne/theano 中做错了什么?

最相关(在我看来)代码部分的快速链接:

这里或多或少是完整的来源:

首先要表扬你使用非线性整流。按照玻尔兹曼机的发明者Geoffrey Hinton的观点,非线性整流器是人类大脑活动的最佳脚。

但对于您选择的其他部分,我建议您更改 NN 架构。对于股票市场的预测,您应该使用一些循环神经网络:最简单的候选者可能是 Elman 或 Jordan 网络。或者你可以尝试更复杂的,比如 LSTM 网络。

另一部分建议,我建议修改你在NN中的内容。一般来说,我建议您应用缩放和归一化。例如,不要输入 NN 原始价格。通过以下方式之一修改它(这些建议不是一成不变的): 1. 输入 NN 价格变化百分比。 2. 如果您输入 NN 30 个值,并希望预测两个值,则从 30 + 2 个值中减去所有 32 个值的最小值,并尝试预测 2 个值,但基于 30 个值。然后只需将结果中的最小值相加32 个值。

不要只在 NN 中提供日期。它对 NN 没有任何关于进行预测的说明。而是输入 NN 日期和时间作为分类值。分类意味着您在多个条目中转换日期时间。例如,除了给 NN 2016/09/10 你可以考虑以下一些。

  1. 交易年份很可能不会提供任何有用的信息。所以你可以省略交易年份。
  2. 09 代表月数或大约 9 月。您可以选择在 NN 中输入月份数,但我强烈建议您在 NN 中输入 12 个,如果是一月份,则首先在 NN 输入 1,其他 11 个输入为零。通过这种方式,您将训练您的网络将 1 月的交易期与 6 月或 12 月的交易期分开。我还建议以同样的方式进行星期几的分类输入。因为周一的交易不同于周五的交易,尤其是在非农就业数据公布的那一天。
  3. 对于几个小时,我建议使用 6 - 8 小时的编码。它将帮助您训练网络以考虑不同的交易时段:亚洲、法兰克福、伦敦、纽约。
  4. 如果您决定在 NN 中输入一些指标,那么对于一些指标,请考虑温度计编码。由于像 ADX 这样的指标通常需要温度计编码。

根据您在评论中关于如何使用 minimum 的问题,我将为您提供简化的示例。 假设您想在 eur/usd:
的收盘价之后使用 NN 进行训练 1.1122、1.1132、1.1152、1.1156、1.1166、1.1173、1.1153、1.1150、1.1152、1.1159。 我将展示使用 window 大小 3(只是为了简单起见)和预测 window 大小 2 的学习,而不是 windows 大小的学习 30。
用于预测的总数据等于 3。输出将为 2。为了学习,我们将使用前 5 个值,或者:
1.1122、1.1132、1.1152、1.1156、1.1166
然后是另外 5 个值或:
1.1132、1.1152、1.1156、1.1166、1.1173
在第一个 window 最小值是:1.1122.
然后从每个值中减去 1.1122:
0、0.002、0.003、0.0033、0.0034。作为输入,您输入 NN 0、0.002、0.003。作为 NN 的输出,您期望 0.0033、0.0034。如果你想让它学得更快,输入 NN 归一化和缩放的值。然后每次你都需要对输入进行去规范化和去缩放。

另一种方式,输入 NN 个价格变化百分比。如果您需要样品,请告诉我。

还有一条更重要的建议。不要只使用 NN 进行交易。绝不!!!更好的方法是发明一些具有一定成功率的系统。例如 30%。然后使用 NN 以将成功率提高到 60%。

我还想为您提供一些指标的温度计编码示例。考虑 ADX 指标和以下示例:

a.>10 >20 >30 >40
1 0 0 0
b. >10 >20 >30 >40
1 1 0 0
示例 a 在 NN 中提供输入,ADX 大于 10。 示例 b 在 NN 中提供输入,ADX 大于 20。
您可以修改温度计编码以提供随机输入。通常随机指标在 0 - 20 和 80 - 100 范围内具有意义,在极少数情况下在 20 - 80 范围内。但一如既往,你可以尝试看看。