您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 2014年数模实验报告《用人工神经网络对人口进行预测》
实验七:用人工神经网络对人口进行预测2014-12-16一.问题表述某地区1984-2009年的户籍人口统计数据如下:年份2009200820072006200520042003200220012000人口(万)707.2698.8689.2678.6667.4658.9651.8646.2638.7631.8年份1999199819971996199519941993199219911990人口(万)625.1616.1609.5604.3598.7592582.1573.9563.2553年份198919881987198619851984人口(万)542.8540.7534521.3510.2498.4以其作为样本数据,利用人工神经网络方法对该地区2010年、2011年、2012年、2013年、2014年的人口数进行预测。二.实验过程与结果(含程序代码)第一步:数据预处理由于原始数属于时间序列,但是神经网络要求用多组输入来训练网络,数据范围要在(0,1)内,因此对样本数据P(t)根据公式1进行预处理,p*(t)=p(t)/10n(1)此处n为所有数据中最大整数位数,即n=4。得到预处理数据为第二步:样本的划分对经过预处理的数据序列p*,根据确定的网络结构划分训练样本和检验样本,具体为输入样本集p=[p*(t-4),p*(t-3),p*(t-2),p*(t-1)];输出样本集t=【p*(t)】,其中t=2009,2008,……1984并同时选择1984~2006年的数据作为学习样本集,2007~2009年的数据作为检验样本集。样本划分结果1输入p=[p′(t-4),p′(t-3),p′(t-2),p′(t-1)]样本组数输出tp′(t-4)p′(t-3)p′(t-2)p′(t-1)p′(t)100000.498420000.49840.51023000.49840.51020.5213400.49840.51020.52130.534050.49840.51020.52130.53400.540760.51020.52130.53400.54070.542870.52130.53400.54070.54280.553080.53400.54070.54280.55300.563290.54070.54280.55300.56320.5739100.54280.55300.56320.57390.5821110.55300.56320.57390.58210.5920120.56320.57390.58210.59200.5987130.57390.58210.59200.59870.6043140.58210.59200.59870.60430.6095150.59200.59870.60430.60950.6161160.59870.60430.60950.61610.6251170.60430.60950.61610.62510.6318180.60950.61610.62510.63180.6387190.61610.62510.63180.63870.6462200.62510.63180.63870.64620.6518210.63180.63870.64620.65180.6589220.63870.64620.65180.65890.6674230.64620.65180.65890.66740.6786240.65180.65890.66740.67860.6892250.65890.66740.67860.68920.6988260.66740.67860.68920.69880.7072270.67860.68920.69880.7072280.68920.69880.7072290.69880.7072300.7072第三步:通过程序来实现。(1)新建newff。建立一个三层网络模型的基本代码如下:net=newff(minmax(p),[n_yc,n_outl],{'tansig','purelin'},'traingdx');(2)训练train函数。函数train采用的是批处理方式进行如下的网络连接权值和阈值的更新。net.performFcn='mse';%表示采用均方误差来评价网络性能指数net.trainParam.show=20;%表示训练100次显示一次结果net.trainParam.goal=1e-5;%表示网络均方误差的目标值net.trainParam.epochs=1000;%表示允许的最大训练周期数net=train(net,p,t);%开始训练,其中p、t分别为输入、输出向量。所用到的程序为:X=[1984:1:2014];Y=[1984:1:2014];Y(1)=498.4;Y(2)=510.2;Y(3)=521.3;Y(4)=534;Y(5)=540.7;Y(6)=542.8;Y(7)=553;Y(8)=563.2;Y(9)=573.9;Y(10)=582.1;Y(11)=592;Y(12)=598.7;Y(13)=604.3;Y(14)=609.5;Y(15)=616.1;Y(16)=625.1;Y(17)=631.8;Y(18)=638.7;Y(19)=646.2;Y(20)651.8;Y(21)=658.9;Y(22)=667.4;Y(23)=678.6;Y(24)=689.2;Y(25)=698.8;Y(26)=707.2.p=[0.49840.51020.52130.534;0.51020.52130.5340.5407;0.52130.5340.54070.5428;0.5340.54070.54280.553;0.54070.54280.5530.5632;0.54280.5530.56320.5739;0.5530.56320.57390.5821;0.56320.57390.58210.592;0.57390.58210.5920.5987;0.58210.5920.59870.6043;0.5920.59870.60430.6095;0.59870.60430.60950.6161;0.60430.60950.61610.6251;0.60950.61610.62510.6318;0.61610.62510.63180.6387;0.62510.63180.63870.64620;0.63180.63870.64620.6518;0.63870.64620.65180.6589;0.64620.65180.65890.6674;0.65180.65890.66740.6786;0.65890.66740.67860.6892;0.66740.67860.68920.6988];p=p';T=[0.54070.54280.5530.56320.57390.58210.5980.59870.60430.60950.61610.62510.63180.63870.64620.65180.65890.66740.67860.68920.69880.7072];net=newff(minmax(p),[4,1],{'tansig','purelin'},'traingdx');net.performFcn='mse';net.trainparam.show=20;net.trainparam.goal=1e-5;net.trainparam.epochs=1000;net=train(net,p,T);A1=sim(net,p);disp('网络拟合的结果');A2=sim(net,p)E=T-A2;MSE=mse(E);disp('数据训练后的网络拟合结果误差');Edisp('均方差误差性能值');MSEdisp('验证数据');pt=[0.66740.67860.68920.6988];pt=pt';A2009=sim(net,pt);E2009=0.7072-A2009;disp('2009年的数据为:');A2009disp('E的值为:');E2009Y(2014-1984)=A2009*le7;inl=0.6786;inl2=0.6892;in3=0.6988;in4=A2009;fori=2010:2014Y(i-1984)=sim(net,pt);pt=[in1,in2,in3,in4];pt=pt';in1=in2;in2=in3;in3=in4;in4=Y(i-1984);Y(i-1984)=Y(i-1990)*le7;EndXlabel=('年份');Ylabel=('人口数');plot(X,Y,X,Y,'*');运行得图为(3)仿真sim函数。仿真函数sim用来对网络进行仿真。具体调用形式为:a=sim(net,p)(4)(4)最后,利用检验样本可以检验训练得到的网络模型预测的效果。经过检验,精度达到要求的网络模型即可用于对新的数据进行预测,如果精度达不到要求,就要重新建模并训练,检验网络模型的过程就是对检验样本进行性能预示的过程。第四步:综合上述方法,最终编制了用于人口数量预测的BP神经网络主程序为:clearclcp=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);%原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx')%设置网络,建立相应的BP网络net.trainParam.show=2000;%训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=le-5;[net,tr]=train(net,pn,tn);%调用TRAINGDM算法训练BP网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);%对BP网络进行伪真anew=postmnmx(anewn,mint,maxt);%还原数据y=anew';第五步:结论通过检验结果显示,2007,2008,2009的预测值分别为0.6829,0.6912,0.7003.将结果还原即为682.9,691.2,700.3万人,与实际样本的差值在6-7万人之间,其与实际样本的比值约为1%,预测精度完全符合要求。网络训练成功后,以''''''''[(p(t4),p(t3),p(t2),p(t1));(p(t3),p(t2),p(t1),p(t));...]分别预测可得到2010至2014年的人口分别为703.2,708.5,720.9,733.8,734.6万人。
本文标题:2014年数模实验报告《用人工神经网络对人口进行预测》
链接地址:https://www.777doc.com/doc-3010524 .html