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 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!