zoukankan      html  css  js  c++  java
  • BP神经网络人口预测程序(matlab实现)

    自己测试人口预测的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;  %预测步数为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

  • 相关阅读:
    【转】折腾好windows 7和windows 2003双系统
    【转】ndis 相关资料
    【转】自己开发程序管理WINDOWS防火墙
    你给信息工程专业本科大一的学生推荐些什么书?
    【转】如何禁止指定IP访问我的计算机
    【转】一个C#写的调用外部进程类
    【转】Crossbow携手微软,全新工具包推进无线传感器应用开发
    【转】RFC整理分类
    【转】国内外物联网技术研究进展
    【链】SmartBits600测试指导书
  • 原文地址:https://www.cnblogs.com/babyfei/p/7003068.html
Copyright © 2011-2022 走看看