BP神经网络预测(人口)程序(matlab)

来源:互联网 发布:交通大数据 编辑:程序博客网 时间:2024/04/30 15:16

自己测试人口预测的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)';endtargets=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;  %预测步数为fn 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运行后结果如下:

     网络结构和各参数显示如下:

                  

                    

                 

                     

                                                                       误差直方图

                  

 

                    

                

 

                

图1  自相关    图2 误差

                          

 图3 预测

 

      注意在对结果好坏的判断中,仅仅看误差图是不够的,如果是一个好的预测,那么自相关性图中除了0阶自相关外,其他的自相关系数系数都不应该超过上下置信区间。还有其他的统计量和图表都都写在”%“后面了,如果需要,去掉就可用。最后的预测值为f_out,我的预测值为

138701.065269972    139467.632609654    140207.209707364    141210.109373609    141981.285378849    142461.332139592    143056.073139776