Please help optimize "ANN forecasting code"

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

回答(0 个)

类别

帮助中心File Exchange 中查找有关 Model-Based Calibration Toolbox 的更多信息

提问:

2013-4-28

Community Treasure Hunt

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

Start Hunting!

Translated by