How to forecast using ANN

6 views (last 30 days)
Anand Kumar
Anand Kumar on 8 May 2015
Edited: Walter Roberson on 11 May 2015
HI, please help me to forecast feature groundwater level using feed forward neural network with LM algorithm, i developed the feed forward neural network with LM algorithm with ANN architecture 3-5-1, my model is as follows, but i want to use this model for forecasting at least 3 to 6 point ahead, can any one please help me,
clear all;
clc;
load dannlm.txt;
t=dannlm(:,1);
rain=dannlm(:,2);
et=dannlm(:,3);
gwl=dannlm(:,4);
%[ACF, Lags, Bounds] = autocorr(gwl, [], 2);
%[PACF, Lags, Bounds] = parcorr(gwl, [], 2);
%[CCF, Lags, Bounds] = crosscorr(gwl,rain);
gwlmin=min(gwl);
gwlmax=max(gwl);
rain=(rain-min(rain))/(max(rain)-min(rain));
et=(et-min(et))/(max(et)-min(et));
gwl=(gwl-min(gwl))/(max(gwl)-min(gwl));
%*****Data Preparation****
for t=5:195
Data(t-4,:)=[rain(t-4) et(t-1) gwl(t-1) gwl(t)];
end
%Define Input patter for Training and Validation
INPTR=Data(1:150, 1:3);
TARTR=Data(1:150,4);
net=newff([0 1; 0 1; 0 1], [5 1], {'logsig', 'purelin'}, 'trainlm');
net.trainParam.epochs=500;
net.trainParam.goal=0.0001;
net.performFcn='mse';
net=init(net);
net=train(net, INPTR', TARTR');
a=sim(net, INPTR');
z=[a' TARTR];
INPVAL=Data(151:191, 1:3);
TARVAL=Data(151:191,4);
y=sim(net, INPVAL');
zv=[y' TARVAL];
%Converting back to Original Flow of gwl Validation
zv=zv*(gwlmax-gwlmin)+gwlmin;
save val1.txt zv -ascii;
z=z*(gwlmax-gwlmin)+gwlmin;
save cal1.txt z -ascii;
CORR_CAL=corrcoef(z)
CORR_VAL=corrcoef(zv)
COM_CAL=z(:,1);
OBS_CAL=z(:,2);
COM_VAL=zv(:,1);
OBS_VAL=zv(:,2);
Eff_ANN_CAL=1-(sumsqr(OBS_CAL-COM_CAL)/sumsqr(OBS_CAL-mean(OBS_CAL)))
Eff_ANN_VAL=1-(sumsqr(OBS_VAL-COM_VAL)/sumsqr(OBS_VAL-mean(OBS_VAL)))
RMSE_ANN_CAL=sqrt(sumsqr(OBS_CAL-COM_CAL)/length(OBS_CAL))
RMSE_ANN_VAL=sqrt(sumsqr(OBS_VAL-COM_VAL)/length(OBS_VAL))
Ex_Var_ANN_CAL=sqrt(sumsqr(COM_CAL-mean(OBS_CAL))/sumsqr(OBS_CAL-mean(OBS_CAL)))
%ERROR_CAL=100*(OBS_CAL-COM_CAL)/OBS_CAL;
%ERROR_VAL=100*(OBS_VAL-COM_VAL)/OBS_VAL;
ANN_PEAK_CAL=(1-max(COM_CAL)/max(OBS_CAL))*100
ANN_PEAK_VAL=(1-max(COM_VAL)/max(OBS_VAL))*100
  1 Comment
Anand Kumar
Anand Kumar on 8 May 2015
Please convert above attachment to forecast at least 3 to 6 point ahead

Sign in to comment.

Accepted Answer

Greg Heath
Greg Heath on 11 May 2015
help narxnet
doc narxnet
net = narxnet(3:6,3:6,5);
===================================================================
% ===>GEH1: WHAT DO THE NAMES DANNLM AND ET STAND FOR?
% ===> GEH2: AUTOCORR(gwl,...), CROSSCORR(GWL,RAIN,...) AND % CROSSCORR(GWL,ET,...) CAN BE USED TO FIND THE SIGNIFICANT DELAYS.
for t=5:195
Data(t-4,:)=[rain(t-4) et(t-1) gwl(t-1) gwl(t)];
end
% ===>GEH3: What is the rationale for this combination?
% ===> GEH4: NEWFF has been obsolete for at least 5 years. Regardless, this is a time series problem which is more easily solved using NARXNET or it's obsolete predecessor.
z=[a' TARTR];
% ===>GEH5: Why not compute the error mse(a'-TARTR) ???
INPVAL=Data(151:191, 1:3);
TARVAL=Data(151:191,4);
% ===> GEH6: This is TEST data, NOT VALIDATION DATA! VALIDATION DATA IS USED TO TUNE PARAMETERS. TEST DATA IS USED TO OBTAIN UNBIASED ESTIMATES OF PERFORMANCE
% THAT IS AS FAR AS I WENT. AFTER CALCULATING
NMSE = mse(error)/mean(var(target',1) and/or
R2 = 1-NMSE
%SUCCESS OR FAILURE IS DETERMINED
Hope this helps.
Thank you for formally accepting my answer
Greg

More Answers (0)

Categories

Find more on Sequence and Numeric Feature Data Workflows in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!