我正在尝试简单的时间序列预测。给定输入数量(1Min滴答)Net应该尝试预测下一个。我已经训练了3个不同设置的网来说明我的问题:
在右侧,您可以看到3个训练师MLP - 随机命名和颜色编码,以及一些训练统计数据。在左边 - 这些网络做出的预测图和白色的实际验证数据。这个图是通过验证数据的每个刻度(白色),将30 | 4 | 60(南希|凯茜|韦恩)的前一个刻度输入到净值并绘制它将在当前刻度位置预测的内容来制作的。
多层感知器的设置(Nancy | Kathy | Wayne设置):
几何:2x30 | 4 | 60个输入节点 - > 30 | 4 | 60隐藏层节点 - > 2输出
时代数:10 | 5 | 10
学习率:0.01
动量:0.5 | 0.9 | 0.5
非线性:整顿
损失:平方错误
似乎应用了更多的训练 - 预测会收敛到某种平均线,这根本不是我所期待的。我期待预测与验证数据有些接近,但有一些误差 我是否选择了错误的模型,误解了机器学习的一些核心概念或者在千篇一律/ theano中做错了什么?
指向最相关(在我看来)代码部分的快速链接:
这里有或多或少的资料来源:
答案 0 :(得分:2)
首先,我要赞扬您使用非线性整流。根据Boltzmann机器的Geoffrey Hinton发明者的观点,非线性整流器是人类大脑活动的最佳选择。
但对于您选择的其他部分,我建议您更改NN架构。对于股票市场的预测,你应该使用一些经常性的NN:最容易的候选人可能是Elman或Jordan网络。或者你可以尝试更复杂的,比如LSTM网络。
建议的另一部分,我建议修改你在NN中提供的内容。通常,我建议您应用缩放和规范化。例如,不要以NN原始价格提供。通过以下方式之一修改它(这些提议不是一成不变的): 1.提供NN百分比的价格变化。 2.如果您输入NN 30个值,并想要预测两个值,则从所有32个值中的30 + 2个值中减去最小值,并尝试预测2个值,但基于30.然后只添加到结果中的最小值32个值。
不要仅在NN中提供日期。它对NN说什么都不做预测。而是将NN日期和时间作为分类值输入。分类意味着您可以在多个条目中转换日期时间。例如,您可以考虑以下某些内容,而不是给予NN 2016/09/10。
根据你在评论中关于如何使用最小值的问题我会给你简化的例子。
假设您想在欧元/美元的收盘价之后用于培训NN:
1.1122,1.1132,1.1152,1.1156,1.1166,1.1173,1.1153,1.1150,1.1152,1.1159。
我将展示学习窗口大小为3(仅为了简单起见)和预测窗口大小2而不是学习窗口大小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
在第一个窗口中,最小值为: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
湾> 10> 20> 30> 40
1 1 0 0
示例a在NN中提供输入,ADX大于10。
示例b在NN中提供输入,ADX大于20。
您可以修改温度计编码以提供随机输入。通常随机指标在0到20和80 - 100的范围内有意义,在很少的情况下在20 - 80的范围内。但是你可以一如既往地试着看。