我使用encog for java进行时间序列预测,但它似乎根本不起作用。我对此很新,我不知道什么是错的。
红线是训练数据(约3600条数据),蓝线是神经网络所预测的......
我使用最后250个数据点来预测下一个数据点。
网络结构:
BasicNetwork net = new BasicNetwork();
net.addLayer(new BasicLayer(null, true, 250));
net.addLayer(new BasicLayer(new ActivationSigmoid(), true, 6));
net.addLayer(new BasicLayer(new ActivationSigmoid(), true, 1));
net.setLogic(new FeedforwardLogic());
net.getStructure().finalizeStructure();
net.reset();
final ManhattanPropagation train = new ManhattanPropagation(net, ndata, 0.5);
此外,它并不重要,我做了多少迭代,在第一次像10次迭代之后,它不断地坚持一个错误值。
答案 0 :(得分:0)
首先,您输入/隐藏节点/输出的比率不太可能起作用。在他的书中,希顿给出了使用以下规则的建议: 假设x代表输入节点。那么隐藏的神经元数应该是x * 2/3。对于输出神经元层I(Heaton除了尝试之外没有给出任何建议),因为通常使用x / 15.
第二部分是训练算法。曼哈顿传播不如rmsprop + backpropogation(同样根据Jeff Heaton的书籍)。
答案 1 :(得分:0)
我不认为你的方法在简单的前馈网络的时间序列预测方面会起作用(仅我的谦虚观点),原因是时间序列预测需要了解频繁发生的数据模式然后预测下一个数据点。我的猜测是因为(可能)移动数据网络没有收敛。使用LSTM或Hierarchical Temporal Memory类型的网络可能会有希望获得更好的结果。