本身測試人口預測的matlab實現:網絡
x=[54167
55196
56300
57482
58796
60266
61465
62828
64653
65994
67207
66207
65859
67295
69172
70499
72538
74542
76368
78534
80671
82992
85229
87177
89211
90859
92420
93717
94974
96259
97542
98705
100072
101654
103008
104357
105851
107507
109300
111026
112704
114333
115823
117171
118517
119850
121121
122389
123626
124761
125786
126743
127627
128453
129227
129988
130756
131448
132129
132802
134480
135030
135770
136460
137510]';
% 該腳本用來作NAR神經網絡預測
lag=3; % 自迴歸階數
iinput=x; % x爲原始序列(行向量)
n=length(iinput);
%準備輸入和輸出數據
inputs=zeros(lag,n-lag);
for i=1:n-lag
inputs(:,i)=iinput(i:i+lag-1)';
end
targets=x(lag+1:end);
%建立網絡
hiddenLayerSize = 10; %隱藏層神經元個數
net = fitnet(hiddenLayerSize);
% 避免過擬合,劃分訓練,測試和驗證數據的比例
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;
%訓練網絡
[net,tr] = train(net,inputs,targets);
%% 根據圖表判斷擬合好壞
yn=net(inputs);
errors=targets-yn;
figure, ploterrcorr(errors) %繪製偏差的自相關狀況(20lags)
figure, parcorr(errors) %繪製偏相關狀況
%[h,pValue,stat,cValue]= lbqtest(errors) %Ljung-Box Q檢驗(20lags)
figure,plotresponse(con2seq(targets),con2seq(yn)) %看預測的趨勢與原趨勢
figure, ploterrhist(errors) %偏差直方圖
figure, plotperform(tr) %偏差降低線
%% 下面預測日後預測幾個時間段
fn=7; %預測步數爲fnide
f_in=iinput(n-lag+1:end)';
f_out=zeros(1,fn); %預測輸出
% 多步預測時,用下面的循環將網絡輸出從新輸入
for i=1:fn
f_out(i)=net(f_in);
f_in=[f_in(2:end);f_out(i)];
end
% 畫出預測圖
figure,plot(1949:2013,iinput,'b',2013:2020,[iinput(end),f_out],'r')測試
用2014a版matlab運行後結果以下:3d
網絡結構和各參數顯示以下:orm
偏差直方圖blog
圖1 自相關 圖2 偏差get
圖3 預測input
注意在對結果好壞的判斷中,僅僅看偏差圖是不夠的,若是是一個好的預測,那麼自相關性圖中除了0階自相關外,其餘的自相關係數係數都不該該超過上下置信區間。還有其餘的統計量和圖表都都寫在」%「後面了,若是須要,去掉就可用。最後的預測值爲f_out,個人預測值爲qt
138701.065269972 139467.632609654 140207.209707364 141210.109373609 141981.285378849 142461.332139592 143056.073139776it