MATLAB: NARXNET to predict the time series

autoregressiveneural networknonlinear

Hi Neural Network users,
I had written a code to predict the last week of my data set, the result is as shown in the plot below Please let me know where I made a mistake 🙁
clear;
%%1. Importing data
load ('Metdata.mat'); % Import file
load('Rdate.mat');
Metdata(:,1)=[];
Rdate(:,1)=[];
Inputs = Metdata'; %Convert to row

Target = Rdate'; %Convert to row
X = con2seq(Inputs); %Convert to cell

T = con2seq(Target); %Convert to cell
%%2. Data preparation
N = 168; % Multi-step ahead prediction
% Input and target series are divided in two groups of data:
% 1st group: used to train the network
inputSeries = X(1:end-N);
targetSeries = T(1:end-N);
% 2nd group: this is the new data used for simulation. inputSeriesVal will
% be used for predicting new targets. targetSeriesVal will be used for
% network validation after prediction
inputSeriesVal = X(end-N+1:end);
targetSeriesVal = T(end-N+1:end);
%%3. Network Architecture
delay = 2;
neuronsHiddenLayer = 15;
% Create a Nonlinear Autoregressive Network with External Input
% net = narxnet(inputDelays,feedbackDelays,hiddenLayerSize);
net = narxnet(1:delay,1:delay,neuronsHiddenLayer);
%%4. Training the network
[Xs,Xi,Ai,Ts] = preparets(net,inputSeries,{},targetSeries);
net = train(net,Xs,Ts,Xi,Ai);
view(net)
Y = net(Xs,Xi,Ai);
% Performance for the series-parallel implementation, only
% one-step-ahead prediction
perf = perform(net,Ts,Y);
%%5. Multi-step ahead prediction
[Xs1,Xio,Aio] = preparets(net,inputSeries(1:end-delay),{},targetSeries(1:end-delay));
[Y1,Xfo,Afo] = net(Xs1,Xio,Aio);
[netc,Xic,Aic] = closeloop(net,Xfo,Afo);
[yPred,Xfc,Afc] = netc(inputSeriesVal,Xic,Aic);
multiStepPerformance = perform(net,yPred,targetSeriesVal);
view(netc)
figure;
plot([cell2mat(targetSeries),nan(1,N);
nan(1,length(targetSeries)),cell2mat(yPred);
nan(1,length(targetSeries)),cell2mat(targetSeriesVal)]')
legend('Original Targets','Network Predictions','Expected Outputs')

Best Answer

Your complete data set does not appear to be stationary (e.g., constant mean, variance and correlations.
Divide the data into stationary subsets and design a model for each.
Hope this helps.
Greg