我试图用Matlab提供的NARX神经网络解决方案来解决时间序列问题。我试图了解如何预测实际值,但我得到的结果几乎是完美的!这些错误太小了,我不确定我是否真的在预测。我只想确定我做的一切都是对的!
基本上,我使用GUI解决方案使用一些示例来训练网络。然后使用以下脚本对新样本进行神经网络测试:
X = num2cell(open2(1:end))'; % input
T = num2cell(close2(1:end))'; % this is the output I should get
net = removedelay(net);
[Xs,Xi,Ai,Ts] = preparets(net,X,{},T);
Y = net(Xs,Xi,Ai);
plotresponse(Ts,Y)
view(net)
Y = cell2mat(Y);
T = cell2mat(T);
sizey = length(Y);
sizet = length(T);
T = T(1:sizey);
figure
plot(1:sizey,T,1:sizey,Y)我得到的图几乎与原来的目标时间序列函数相同。误差确实很小,唯一的区别是图(Y)向左移动了2个样本。但是,我真的是在预测吗?
这是图的一部分:

提前感谢!
更新:实际预测图向右移动,而不是向左移动。由预付费功能(蓝色)提供的目标发生在前面!所以这并不能说明它实际上是在预测。
发布于 2015-06-26 03:36:13
右移
图显示的时差为1(而不是2!)时间步长这是不理想的,但可能会发生时,延迟是错误的选择,从而导致这种延迟模式。(要进一步解释,请看MATLAB CENTRAL上的这个问题。事实上,Greg在ANNs上发布了大量的资料,非常值得一读,尽管有时要立即理解它有点短,特别是对于初学者来说。)因此,为了避免这种情况,您必须查看数据的相关模式。
Removedelay()
现在,我假设您希望通过删除网络的延迟来纠正这种行为。不幸的是,这是而不是,removedelay()的意思是:
这个例子使用timedelaynet,但也可以用于NAR和NARX网络,我发现这种描述非常有用。与removedelay的文件的报价相结合
结果是一个网络,它的行为相同,除了输出产生的时间步骤后。
很明显,你并没有改变网络,相反,你只改变了你的y值的时间依赖性,所以你的网络会尝试提前一步预测。您可以在T和Y向量的末尾看到这种行为,其中Y将有一个附加值,而T将用NaN填充这个空间(因为您显然无法突然生成更多的目标)。
removedelay()应该与闭环设计结合使用,以便您可以尽早获得预测值,以便将其用作下一步的直接输入。在这种情况下,将输出延迟增加更多也是有意义的,这就是为什么可以传递额外的参数n的原因。
net = removedelay(net,n);为了证明没有使用额外的时间步骤,您可以用经过训练的网络模拟所需的数据集,然后用removedelay()模拟相同的数据集。它们将是相同的,除了Y曲线的最后一个值(见图1)。
图1:这两幅图都是基于MATLAB的换热器示例的前3500个数据点训练的相同的网络。显示了在训练过程中没有使用的集合中的最后500个值的仿真结果。除了左边使用removedelay()的一个附加值外,结果是相同的。

错误
如果使用有代表性的培训集,则错误必须非常小。因此,预测类似的,新的数据将是好的,因为你的网络是不过份的。
结论
那么,你是在预测吗?不,你是在模拟。模拟网络的行为是基于您以前未知的数据集的输入,而不是目标(它们只需要被传递以允许性能评估)。因此,在这两种情况下,使用或不使用removedelay()将新数据传递到您的网络都是模拟的,因为它基于提供的输入。删除延迟对这些结果没有影响。
另一方面,预测不需要输入数据,因为它实际上只是在不考虑新输入的情况下继续网络到目前为止所学习的模式。
建议
如果您只想拥有一个具有有效输入值的未知数据集以进行模拟,那么您也可以使用或divideint选项将其作为测试集的一部分传递给您。
如果您希望使用removedelay()的早期预测,或者由于输入有漏洞或由于其他原因而需要预测,则应该考虑使用闭环模拟未知集。如果它的表现太糟糕,你也可以从一开始就训练一个闭环网络。
https://stackoverflow.com/questions/31023835
复制相似问题