MATLAB: NAR neural network multi step prediction

narneural networkpredictiontime series

Hi All,
I've been working on this problem for a few weeks but haven't made much progress. I'm really struggling.
I have a vector called A which has 250 time steps of a particular data set. I need to predict the 280th value. I'm using a script generated by the NN toolbox gui, which I attached below. When I attempt this, I basically run the script with 30 NaN values added to the end of vector A.
The non closed network produces good results for the original 250 steps, but the closed network does an awful job. I must be doing something very wrong here. Here is a plot that I made to describe what I'm talking about http://www.shareimages.com/images/pics/0/0/2/59824-pJOgl5iZnKailqCY-plots.jpg.
Could anyone tell me what I'm doing wrong? This is really frustrating, and I'd really appreciate it.
-Jordan
This is the matlab generated code:
% Solve an Autoregression Time-Series Problem with a NAR Neural Network
% Script generated by NTSTOOL
% Created Sat Oct 15 20:17:01 EDT 2011
%

% This script assumes this variable is defined:
%
% a - feedback time series.
targetSeries = tonndata(a,true,false);
% Create a Nonlinear Autoregressive Network
feedbackDelays = 1:2;
hiddenLayerSize = 10;
net = narnet(feedbackDelays,hiddenLayerSize);
% Prepare the Data for Training and Simulation
% The function PREPARETS prepares timeseries data for a particular network,
% shifting time by the minimum amount to fill input states and layer states.
% Using PREPARETS allows you to keep your original time series data unchanged, while
% easily customizing it for networks with differing numbers of delays, with
% open loop or closed loop feedback modes.
[inputs,inputStates,layerStates,targets] = preparets(net,{},{},targetSeries);
% Setup Division of Data for Training, Validation, Testing
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
% Train the Network
[net,tr] = train(net,inputs,targets,inputStates,layerStates);
% Test the Network
outputs = net(inputs,inputStates,layerStates);
errors = gsubtract(targets,outputs);
performance = perform(net,targets,outputs)
% View the Network
view(net)
% Plots
% Uncomment these lines to enable various plots.
%figure, plotperform(tr)
%figure, plottrainstate(tr)
%figure, plotresponse(targets,outputs)
%figure, ploterrcorr(errors)
%figure, plotinerrcorr(inputs,errors)
% Closed Loop Network
% Use this network to do multi-step prediction.
% The function CLOSELOOP replaces the feedback input with a direct
% connection from the outout layer.
netc = closeloop(net);
[xc,xic,aic,tc] = preparets(netc,{},{},targetSeries);
yc = netc(xc,xic,aic);
perfc = perform(net,tc,yc)
% Early Prediction Network
% For some applications it helps to get the prediction a timestep early.
% The original network returns predicted y(t+1) at the same time it is given y(t+1).
% For some applications such as decision making, it would help to have predicted
% y(t+1) once y(t) is available, but before the actual y(t+1) occurs.
% The network can be made to return its output a timestep early by removing one delay
% so that its minimal tap delay is now 0 instead of 1. The new network returns the
% same outputs as the original network, but outputs are shifted left one timestep.
nets = removedelay(net);
[xs,xis,ais,ts] = preparets(nets,{},{},targetSeries);
ys = nets(xs,xis,ais);
closedLoopPerformance = perform(net,tc,yc)
This is my attempt at a prediction:
for n=1:length(a);
b{end+1}=a(n);
end
[X,Xi,Ai,T] = preparets(netc,{},{},b);
y = sim(netc,X,Xi,Ai);

Best Answer

I have just posted the answer in the NEWSGROUP.
NARNET TUTORIAL ...
Hope it helps.
Thank you for formerly accepting my answer
Greg