如何使用NARX预测未来使用有效的输入数据

2视图(30天)
2016我用Matlab在64位Windows 7专业机器。我有132的输入数据:[61.17,341.5600][65.4800,328.2080][64.8800,355.4050]和........和120年输出数据为:62352 95856 89124 .......我生成了一个闭环NARX预测输出数据为输入向量X1 (121:128)。然而,我只能模拟120输出120输入,我不能预测未来输出使用有效的输入X1 (121:128)。我用下面的代码来模拟输出:
u1 = X1 (1:90);% X1是输入数据
y1 = (1:90);%日元是输出数据
[p1,₁, Ai1, t1) = preparets (net_closed, u1, {}, y1);
yp1 = net_closed (p1,₁, Ai1);
TS =大小(t1, 2);
阴谋(1:TS, cell2mat (t1),“b”1:TS, cell2mat (yp1),“r”)
结果图:我如何改变我的代码来预测的输出输入120:128吗?提前谢谢你。
2的评论
阿明Niaki
阿明Niaki 2017年1月6日
编辑:阿明Niaki 2017年1月6日
我是PK处理同一问题。目标是获得12个月的预测响应Y1(目标)基于X1目前拥有9变量有显著相关性的响应(7)。只有128步伐的响应。过去12个月已经留出作为性能指标和12个月预测网络的这些值。请参阅附加数据发现X (t)和Y (t) (https://docs.google.com/spreadsheets/d/1PU4yiEkoJ9z4635jXAOMpC2_8I0y2ylPcGUmWV-s3u8/edit?usp=sharing)。
这就是我们现在在:鉴于X1(9输入变量- 1 x116细胞),和日元(a系列作为目标1 x116),如所提供的文件,网络训练(根据我的观察,网络提供了更好的结果与贝叶斯学习算法' trainbr ']。令人满意的模型已经训练/培训后,我们试图修改的值Xc, Xic,但没有混乱与Aic和运行以下的命令栏:
ycforecast1 = netc (Xc、Xic Aic)
X = X1;
T = y₁;
trainFcn =“trainlm”;
inputDelays = 1:2;
feedbackDelays = 1:2;
hiddenLayerSize = 10;
网= narxnet (inputDelays feedbackDelays hiddenLayerSize,“开放”,trainFcn);
[x, xi,人工智能,t] = preparets(净,x, {}, t);
net.divideParam。trainRatio = 70/100;net.divideParam。valRatio = 15/100;net.divideParam。testRatio = 15/100;(净,tr) =火车(净,x, t, xi, ai);净(y = x, xi, ai);e = gsubtract (t、y);性能=执行(净、t、y)视图(净)netc = closeloop(净); netc.name = [net.name ' - Closed Loop']; view(netc) [xc,xic,aic,tc] = preparets(netc,X,{},T); yc = netc(xc,xic,aic); closedLoopPerformance = perform(net,tc,yc) nets = removedelay(net); nets.name = [net.name ' - Predict One Step Ahead']; view(nets) [xs,xis,ais,ts] = preparets(nets,X,{},T); ys = nets(xs,xis,ais); TS = size(ts,2); plot(1:TS,cell2mat(ts),'b',1:TS,cell2mat(ys),'r') stepAheadPerformance = perform(nets,ts,ys)
Xic的值被设置为1 x2细胞(115和116的值9变量X (t)和Xc的值设置为1 x12细胞由过去12个月X (t)的最初我们预留。
经过我所提到的,ycforecast1 12值返回给我们解释为给定的训练网络的预测过去12 X (t)的年代我们喂它,然而,似乎很值了,我甚至不考虑计算模型的日军的预测。有什么建议吗?

登录置评。

接受的答案

顾磊杰(Rajat Kathuria
顾磊杰(Rajat Kathuria 2017年1月5日
编辑:顾磊杰(Rajat Kathuria 2017年1月5日
尽管如此,它仍然是不清楚你打算从你的脚本实现,我假定你想预测时间序列(T)没有一个外生变量(X)。在这种情况下,你不需要使用narnet和narXnet。下面的脚本(从原始脚本)会给你一步预测变量y
u1 = num2cell (1:90);
feedbackDelays = 1:2;
hiddenLayerSize = 10;
网= narnet (feedbackDelays hiddenLayerSize);%注意,我使用narnet(不是narXnet)
[X, Xi,人工智能,T] = preparets(网,{},{},u1);
(净,tr) =火车(净,X, T, Xi, Ai);
%的预测
网= removedelay(净);
X2 = num2cell (120:128);%输入系列的长度是9
[x,切除酶,ais, ts) = preparets(网,{},{},X2);
切除酶,y =网(xs ais)
%注意,因为有两个预测变量(“feedbackDelays”), % 8对应的预测将会有一个输入一系列长度9。%。第一次输入,120年和121年收益率第一输出,~ 122。最后输入输出129 ~ 127年和128年收益率最终%。结果可能略取决于你的训练,但网络似乎%学到这个简单的线性趋势。
1评论
PK
PK 2017年1月5日
顾磊杰(Rajat,谢谢你的回答。我想用X2作为输入来预测输出与我训练的NARX X1和Y1 (netc或网)。我用(X1, Y1生成NARX,它是“netc”(闭环)训练后我的代码。现在,我需要使用这个NARX预测Y从X2 (X1的延续10更多步伐)。我认为narnet案件后,你没有任何输入最后的步伐。但是,X2作为输入对未来的预测。我的问题是:我如何使用X2 netc预测Y ?谢谢。

登录置评。

答案(1)

PK
PK 2017年1月4日
格雷格,抱歉发布数据不足。NARX生成的代码是:
X = X1;
T = y₁;
trainFcn =“trainlm”;
inputDelays = 1:2;
feedbackDelays = 1:2;
hiddenLayerSize = 10;
网= narxnet (inputDelays feedbackDelays hiddenLayerSize,“开放”,trainFcn);
[x, xi,人工智能,t] = preparets(净,x, {}, t);
net.divideParam。trainRatio = 70/100;
net.divideParam。valRatio = 15/100;
net.divideParam。testRatio = 15/100;
(净,tr) =火车(净,x, t, xi, ai);
净(y = x, xi, ai);
e = gsubtract (t、y);
性能=执行(净、t、y)
视图(净)
netc = closeloop(净);
netc.name = [net.name”——闭环”];
视图(netc)
(xc、xic aic, tc) = preparets (netc, X, {}, T);
yc = netc (xc、xic aic);
closedLoopPerformance =执行(净、tc、yc)
网= removedelay(净);
nets.name = [net.name”——预测领先一步”];
视图(网)
[X,切除酶,ais, ts) = preparets(网,X, {}, T);
y =网(xs,切除酶,ais);
TS =大小(TS, 2);
阴谋(1:TS, cell2mat (TS),“b”1:TS, cell2mat (y),“r”)
stepAheadPerformance =执行(网、t、y)
X1是输入和Y1是输出。我附加的数据。我需要预测另一组输入输出假设X2。我如何更改代码,以预测X2的输出?谢谢你!

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!