基于BP神经网络的人口预测

简介: 基于BP神经网络的人口预测

一、人工神经网络

1.1 人工神经元

人工神经元是对生物神经元的模拟,这种信号传输由输入信号x、突触权重ω、内部阈值θ_j和输出信号y来模拟,如图:

image.png

1.2 BP人工神经网络(Back Propagation)

BP人工神经网络由输入层、隐含层、输出层三层组成,核心是通过一边向后传递误差,一边修正误差,以此来不断调整网络参数,以实现或逼近所希望输入、输出量之间的映射关系。


二、搭建BP神经网络

2.1 利用MATLAB搭建BP人工神经网络的步骤:

  1. 读取数据,并作归一化处理;
  2. 划分训练集和测试集;
  3. 构建BP神经网络;
  4. 网络参数配置;
  5. BP神经网络训练;
  6. 仿真计算;
  7. 计算与测试集之间的误差


2.2 BP人工神经网络人口模型预测

  1. 选取1961-2010年人口数据作为训练集,2011-2015年人口数据作为测试集,搭建BP神经网络,并以此预测2016-2020年的人口数据。
  2. 隐含层神经元的个数:10,通过经验公式确定:image.png,n为输入层层数,m为输出层层数,a∈[0,10] 隐含层
  3. 神经元的传输函数:tansig (正切S型传递函数)
  4. 输出层的传输函数:purelin(线性传递函数)
  5. 反向传播的训练函数:trainlm(Levenberg-Marquardt算法,即非线性最小二乘法)e983f767a2a8c057d0ca7f8c87d2ee46_watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zey6LCI56S-,size_20,color_FFFFFF,t_70,g_se,x_16.png

因为BP神经网络训练过程中,是根据每个节点的计算误差不断修正调整连接层的权值ω、阈值θ_j,所以每次计算结果会有偏差。选取拟合结果比较好的两次如下:


三、数据比较

将BP人工神经算法与改进后的Logistics算法的拟合效果进行对比,拟合误差以均方根误差为比较标准。

模型 2011-2015的拟合误差 2016-2020的预测误差

改进的Logistics算法 306.7126 792.9019
BP神经网络算法(第1组) 106.1849 415.5135
BP神经网络算法(第2组) 277.2575 134.0518

四、MATLAB代码

clear all  
  clc  
  clf  
  %% 1,读取1961-2015的人口数据,并做归一化处理  
  input_1=[65859,67296,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,133450,134091,134916,135922,136726,137646,138326];  
  n=length(input_1);  
  row=4;      %通过前四年数据,预测第五年  
  input=zeros(4,n-row);  
  for i =1:row  
      input(i,:)=input_1(i:n-row+i-1);  
  end  
  output=input_1(row+1:end);  
  [inputn,inputps]=mapminmax(input);  
  [outputn,outputps]=mapminmax(output);  
  %% 2,划分训练集和测试集  
  inputn_train=inputn(:,1:n-row-5);  
  inputn_test=inputn(:,n-row-4:end);  
  outputn_train=outputn(1:n-row-5);  
  outputn_test=outputn(n-row-4:end);  
  %% 3,构建BP神经网络  
  hiddennum=10;%隐含层节点数量经验公式p=sqrt(m+n)+a ,故分别取3~13进行试验  
  net=newff(inputn_train,outputn_train,hiddennum,{'tansig','purelin'},'trainlm');     %tansig :正切S型传递函数。purelin:线性传递函数。trainlm:Levenberg-Marquardt算法   
  %% 4,网络参数配置  
  net.trainParam.epochs=1000;  
  net.trainParam.lr=0.2;    
  %% 5,BP神经网络训练  
  [net,tr]=train(net,inputn_train,outputn_train);   
  %% 6,仿真计算  
  resultn=sim(net,inputn_test);  
  %% 7,计算与测试集之间误差  
  result=mapminmax('reverse',resultn,outputps);  
  output_test=mapminmax('reverse',outputn_test,outputps);  
  error=result-output_test;  
  rmse=sqrt(error*error')/length(error); 
  figure(1)  
  plot(output_test,'b')  
  hold on  
  plot(result,'r*');  
  hold on  
  plot(error,'s','MarkerFaceColor','k')  
  legend('期望值','预测值','误差')  
  xlabel('数据组数')  
  ylabel('值')  
  %% 8,预测未来五年2016-2020的人口数据  
  pn=5;  
  [p_in,ps]=mapminmax(input_1(n-row+1:end));  
  p_in=p_in';  
  p_outn=zeros(1,pn);  
  for i = 1:pn  
      p_outn(i)=sim(net,p_in);  
      p_in=[p_in(2:end);p_outn(i)];  
  end  
  p_out=mapminmax('reverse',p_outn,ps)  
  error2=p_out-[139232,140011,140541,141008,141178];  
  rmse2=sqrt(error2*error2')/length(error2)  
  figure(2)  
  plot(1961:2020,[input_1,139232,140011,140541,141008,141178],'r*')  
  hold on  
  plot(2011:2015,result,'b')  
  hold on  
  plot(2015:2020,[result(end),p_out],'g')  


目录
打赏
0
0
0
0
6
分享
相关文章
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
130 10
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
210 80
基于BP神经网络的金融序列预测matlab仿真
本项目基于BP神经网络实现金融序列预测,使用MATLAB2022A版本进行开发与测试。通过构建多层前馈神经网络模型,利用历史金融数据训练模型,实现对未来金融时间序列如股票价格、汇率等的预测,并展示了预测误差及训练曲线。
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
基于PSO-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目展示了利用粒子群优化(PSO)算法优化支持向量机(SVM)参数的过程,提高了分类准确性和泛化能力。包括无水印的算法运行效果预览、Matlab2022a环境下的实现、核心代码及详细注释、操作视频,以及对PSO和SVM理论的概述。PSO-SVM结合了PSO的全局搜索能力和SVM的分类优势,特别适用于复杂数据集的分类任务,如乳腺癌诊断等。
基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP
本文介绍了基于Matlab 2022a的几种信道估计算法仿真,包括LS、OMP、NOMP、CoSaMP及改进的BP神经网络CoSaMP算法。各算法针对毫米波MIMO信道进行了性能评估,通过对比不同信噪比下的均方误差(MSE),展示了各自的优势与局限性。其中,BP神经网络改进的CoSaMP算法在低信噪比条件下表现尤为突出,能够有效提高信道估计精度。
88 2
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
86 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。
107 9
【Tensorflow+keras】用代码给神经网络结构绘图
文章提供了使用TensorFlow和Keras来绘制神经网络结构图的方法,并给出了具体的代码示例。
88 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等