bp神经网络人口预测程序(matlab实现)

1949年至2013年人口数为5416755196563005748258796602666146562828646536599467207662076585967295... 1949年至2013年人口数为
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
(万人)2014-2020年人口数,matlab程序怎么编?
展开
 我来答
mcr董事长
推荐于2018-02-27 · TA获得超过1064个赞
知道小有建树答主
回答量:107
采纳率:0%
帮助的人:102万
展开全部

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神经网络预测
% 作者:Macer程
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;  %预测步数为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')

                                             图1自相关


                                                 图2误差

                                                  图3预测

      上面的程序是可以通用的,只要你根据自己需要是可以修改用在其他地方的,基本思想就是用前lag年的人口数来预测下一年的人口,至于lag等于几你是可以自己改的。还有在对结果好坏的判断中,仅仅看误差图是不够的,如果是一个好的预测,那么自相关性图中除了0阶自相关外,其他的自相关系数系数都不应该超过上下置信区间。还有其他的统计量和图表都都写在”%“后面了,如果需要,去掉就可用。最后的预测值为f_out,我的预测值为

138701.065269972    139467.632609654    140207.209707364    141210.109373609    141981.285378849    142461.332139592    143056.073139776


小鱼小虫真心的
2017-10-25
知道答主
回答量:0
采纳率:0%
帮助的人:0
引用mcr董事长的回答:
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神经网络预测% 作者:Macer程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')
图1自相关

图2误差

图3预测
上面的程序是可以通用的,只要你根据自己需要是可以修改用在其他地方的,基本思想就是用前lag年的人口数来预测下一年的人口,至于lag等于几你是可以自己改的。还有在对结果好坏的判断中,仅仅看误差图是不够的,如果是一个好的预测,那么自相关性图中除了0阶自相关外,其他的自相关系数系数都不应该超过上下置信区间。还有其他的统计量和图表都都写在”%“后面了,如果需要,去掉就可用。最后的预测值为f_out,我的预测值为
138701.065269972 139467.632609654 140207.209707364 141210.109373609 141981.285378849 142461.332139592 143056.073139776
展开全部
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]';
>> lag=3;
>> iinput=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);
Error using trainlm (line 109)
Inputs and targets have different numbers of samples.

Error in network/train (line 106)
[net,tr] = feval(net.trainFcn,net,X,T,Xi,Ai,EW,net.trainParam);

>> yn=net(inputs);
Error using network/sim (line 130)
Input 1 size does not match net.inputs{1}.size.

Error in network/subsref (line 14)
[v,out2,out3] = sim(vin,subs{:});
运行不了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式