Please help optimize "ANN forecasting code"

1 view (last 30 days)
Arya
Arya on 28 Apr 2013
Dear Sir...
i have some data like this :
  • Jan-07 97.14
  • Feb-07 98.63
  • Mar-07 98.86
  • Apr-07 98.63
  • May-07 99.06
  • Jun-07 99.44
  • Jul-07 100.03
  • Aug-07 100.69
  • Sep-07 101.25
  • Oct-07 102.01
  • Nov-07 102.15
  • Dec-07 102.10
  • Jan-08 103.14
  • Feb-08 104.26
  • Mar-08 105.85
  • Apr-08 105.56
  • May-08 106.81
  • Jun-08 109.37
  • Jul-08 110.69
  • Aug-08 111.36
  • Sep-08 112.46
  • Oct-08 113.06
  • Nov-08 113.13
  • Dec-08 112.66
  • Jan-09 112.56
  • Feb-09 112.71
  • Mar-09 113.47
  • Apr-09 113.28
  • May-09 113.38
  • Jun-09 113.54
  • Jul-09 114.06
  • Aug-09 114.43
  • Sep-09 115.77
  • Oct-09 115.77
  • Nov-09 115.94
  • Dec-09 116.25
  • Jan-10 117.12
  • Feb-10 117.67
  • Mar-10 117.43
  • Apr-10 117.86
  • May-10 117.88
  • Jun-10 118.87
  • Jul-10 120.93
  • Aug-10 121.57
  • Sep-10 122.83
  • Oct-10 122.86
  • Nov-10 123.64
  • Dec-10 124.51
  • Jan-11 125.26
  • Feb-11 125.11
  • Mar-11 124.97
  • Apr-11 124.29
  • May-11 124.45
  • Jun-11 124.99
  • Jul-11 125.83
  • Aug-11 126.55
  • Sep-11 127.19
  • Oct-11 126.95
  • Nov-11 127.60
  • Dec-11 128.08
  • Jan-12 128.62
  • Feb-12 129.09
  • Mar-12 129.51
  • Apr-12 129.69
  • May-12 130.16
  • Jun-12 131.05
  • Jul-12 132.14
  • Aug-12 133.8
  • Sep-12 133.67
  • Oct-12 133.76
  • Nov-12 133.74
  • Dec-12 134.29
and i wanna forecast it for 12 months ahead... few days ago, i found a matlab code, from google, like this :
  • % Outputs:
  • % - RMSE , root mean squares error.
  • % - yL, matrix of y's lags.
  • % - TRAINEDNET , a NET with minimum mean squares error.
  • % - minRMSE , minimum of root mean squares error.
  • % - yf , forecast of y.
  • % Inputs:  diisi manual pake yoy tiap bulan
  • % - y , a time series in vertical vector form.(eg stock prices)
  • % - maxlag ,maximume lag that should be entered in model.(eg 5)  12
  • % - nhiden, number of hidden layer units.(eg 5)  12
  • % - trset,percent of observations for trainig set.(eg 80)
  • % - HPF ,number of priods that should be forecasted.(eg 10)
  • % - lr , Learning rate.(eg 0.1)  0.01 ato 0.1
  • %---------------------------------------------------------------------
  • % Building networks with different number of hiden units and input lags.
  • for lay=1:nhiden
  • for lag=1:maxlag
  • PR(1:maxlag,1)=[-1];
  • PR(1:maxlag,2)=[1];
  • net(lay,lag)={newff(PR(1:lag,:),[lay 1],{'tansig','purelin'},'trainlm' )};
  • net{lay,lag}.trainParam.lr = lr;
  • net{lay,lag}.trainParam.lr_inc = 1.05;
  • net{lay,lag}.trainParam.lr_dec = .5;
  • net{lay,lag}.trainparam.epochs=1000;
  • net{lay,lag}.trainparam.show=100;
  • net{lay,lag}.trainparam.goal=1e-5;
  • end
  • end
  • %---------------------------------------------------------------------
  • %defining lags for y
  • y=y';
  • [ny,mny,mxy]=premnmx(y);
  • [nyr,nyc]=size(y);
  • trset=floor(nyc*trset/100)
  • for lag=1:maxlag
  • yL=zeros(lag,nyc);
  • end
  • for s1=1:nyc
  • for s2=1:maxlag
  • yL(s2,s1)=NaN;
  • end
  • end
  • for lag=1:maxlag
  • yL(lag,1+lag:nyc)=ny(1:nyc-lag);
  • end
  • %---------------------------------------------------------------------
  • %training nets
  • for lay=1:nhiden
  • for lag=1:maxlag
  • %early stopping
  • val.P=yL(1:lag,trset+1:nyc);
  • val.T=ny(1,trset+1:nyc);
  • [TRAINEDNET{lay,lag},tr]=train(net{lay,lag},yL(1:lag,lag+1:trset),ny(1,lag+1:trset),[],[],val);
  • %RMSE calculation
  • yhat=sim(TRAINEDNET{lay,lag},yL(1:lag,trset+1:nyc));
  • rmse=((sum((yhat-ny(1,trset+1:nyc)).^2))/nyc)^.5;
  • RMSE(lay,lag)=rmse;
  • RMSEE=RMSE;
  • minRMSE=min(min(RMSE));
  • end
  • end
  • for lag=1:maxlag
  • for lay=1:nhiden
  • if RMSEE(lay,lag)==min(min(RMSE))
  • optlay=lay
  • optlag=lag
  • end
  • end
  • end
  • yfL=yL(1:optlag,:);
  • %---------------------------------------------------------------------
  • %training again the optimal net with complete set of data.
  • TRAINEDNET{optlay,optlag}=train(TRAINEDNET{optlay,optlag},yL(1:optlag,:),ny(1,:))
  • %H period forecasting
  • for o=1:HPF
  • yf=sim(TRAINEDNET{optlay,optlag},yfL(1:optlag,nyc-1:o+nyc-1));
  • yf=[ny yf];
  • for flag=1:optlag
  • yfL(flag,1+flag:nyc+o)=yf(1:o+nyc-flag);
  • end
  • end
  • yf2=sim(TRAINEDNET{optlay,optlag},yL(1:optlag,optlag+1:nyc));
  • yf=yf';
  • yf2=yf2';
  • %converting the data back into unnormalized units.
  • yf=postmnmx(yf,mny,mxy);
  • yf2=postmnmx(yf2,mny,mxy);
  • yhatopt=sim(TRAINEDNET{optlay,optlag},yL(1:optlag,trset+1:nyc));
  • yy(1:nyc-trset)=ny(trset+1:nyc);
  • error=(yhatopt./yy-1);
  • subplot(2,1,1);
  • plot([1:nyc-trset],yhatopt,'g-' ,[1:nyc-trset],yy,'r-');
  • legend('yhatopt','yy' ,0);
  • ylabel('value');
  • title(['Frecasted by Optimal Net']);
  • subplot(2,1,2);
  • plot([1:nyc-trset],error,'b-')
  • xlabel('Time');
  • ylabel('Residuals');
  • title(['Forecast Error for Test Set' ]);
  • %END
Can anyone please help me to optimize this code? because the result is not good enough... thanks in advance...
Regards, Jodi

Answers (0)

Categories

Find more on Financial Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!