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

2023-10-30

一、人工神经网络

1.1 人工神经元

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

可见,简单神经元的数学表达式为: y = f ( ∑ i = 1 n w i . x i − θ i ) y=f(\sum_{i=1}^nw_i.x_i-\theta_i) y=f(i=1nwi.xiθi)
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,通过经验公式确定: ( a + b ) \sqrt(a+b) ( a+b),n为输入层层数,m为输出层层数,a∈[0,10] 隐含层
  3. 神经元的传输函数:tansig (正切S型传递函数)
  4. 输出层的传输函数:purelin(线性传递函数)
  5. 反向传播的训练函数:trainlm(Levenberg-Marquardt算法,即非线性最小二乘法)
    在这里插入图片描述

因为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')  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于BP神经网络的人口预测 的相关文章

  • 获取向量幂的有效方法

    我编写了一个代码 在数值上使用勒让德多项式直至某个高 n 阶 例如 case 8 p 6435 x 8 12012 x 6 6930 x 4 1260 x 2 35 128 return case 9 如果向量x太长这会变得很慢 我发现说之
  • Ilnumerics Ilpanel 在 winform 中编译成 dll 并加载到 matlab 时不激活

    我想将 Visual studio 2012 中用 C 编写的 winform 编译为 dll 然后将其加载到 matlab 2013a 中 然后 我想使用 matlab net 接口与 winform 进行交互 侦听其事件并通过一组预定义
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • 氡变换线检测

    我正在尝试检测灰度图像中的线条 为此 我在 MATLAB 中使用 Radon 变换 我的 m 文件的示例如下所示 我可以使用此代码检测多行 我还使用线条的移位和旋转属性来绘制线条 但是 我不明白在获取rho和theta值后如何获取检测线的起
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • MATLAB 问题中的 Parfor

    为什么我不能使用parfor在这段代码中 parfor i 1 r for j 1 N r xr j N r i 1 x i r j 1 end end 这是错误 错误 parfor 中的变量 xr 无法分类 请参阅 MATLAB 中的并行
  • 使用正常数据直方图与直接公式进行熵估计(matlab)

    假设我们已经绘制了n 10000标准正态分布的样本 现在我想使用直方图计算其熵来计算概率 1 计算概率 例如使用matlab p x hist samples binnumbers area x 2 x 1 sum p p p area b
  • MATLAB 符号替换

    我知道在 MATLAB 中如果声明了 syms x y f x 2 y 2 grad gradient f 然后grad会存储值 2 x 2 y 如果我想评估梯度 2 2 I use subs f x y 2 2 这返回 4 4 我正在编写
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • 当 MATLAB 变得非常非常忙时,如何中断它?

    我正在运行一个长时间的模拟MATLAB http en wikipedia org wiki MATLAB我意识到我需要停下来重新运行 然而 MATLAB 确实对这种计算很感兴趣 并且它停止了响应 如何在不终止 MATLAB 的情况下中断此

随机推荐

  • YoloV8改进策略:InceptionNeXt和YoloV8完美结合,让YoloV8大放异彩

    文章目录 论文翻译 摘要 1 简介 2 相关工作 2 1 Transformer v s CNN 2 2 大核卷积 3 方法 3 1 MetaNeXt 3 2 Inception深度卷积 3 3 InceptionNeXt 4 实验 4 1
  • 关于background-image调整大小和位置的方法笔记

  • 面试---计算机基础

    1 C C 内存有哪几种类型 C中 内存分为5个区 堆 malloc 栈 如局部变量 函数参数 程序代码区 存放二进制代码 全局 静态存储区 全局变量 static变量 和常量存储区 常量 此外 C 中有自由存储区 new 一说 全局变量
  • 今天来聊一聊什么是链式法则

    链式法则 Chain Rule 是微积分中的一条重要规则 用于计算复合函数的导数 在深度学习中 链式法则起到了关键的作用 它允许我们有效地计算神经网络中每个参数对于损失函数的梯度 本文将详细介绍链式法则的概念和应用 帮助读者更好地理解它在神
  • 程序员面试题精选100题(43)-n个骰子的点数

    程序员面试题精选100题 43 n个骰子的点数 题目 把n个骰子扔在地上 所有骰子朝上一面的点数之和为S 输入n 打印出S的所有可能的值出现的概率 分析 玩过麻将的都知道 骰子一共6个面 每个面上都有一个点数 对应的数字是1到 6之间的一个
  • strtok函数——通过分隔符对字符串进行分隔操作

    用分隔符分隔字符串 根据该字符串中分隔符的多少 可以使用一个或多个分隔符来对字符串进行操作 两种循环做法 可进行比较 int main 首先定义一个字符串 char str asdfg das da asda char sub strtok
  • 题4:替换空格

    题目 请编写一个方法 将字符串中的空格全部替换为 20 假定该字符串有足够的空间存放新增的字符 并且知道字符串的真实长度 小于等于1000 同时保证字符串由大小写的英文字母组成 给定一个string iniString 为原始的串 以及串的
  • sourcemod修改服务器网址,【创建服务器教程】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 安装很简单 建议不要安装在C盘 在Region的地方注意下 选择Asia地区 安装完毕后 我们要建立一个批处理 批处理的建立方法 新建一个文本 把命令写进去 然后保存 再将扩展名txt修改为ba
  • 边界值测试及三角形案例分析(Junit5测试)

    黑盒测试主要包括边界值测试 等价类测试 基于判断表的测试 因果图 正交实验设计法 错误推测法等 本文章主要介绍边界值测试 以及介绍边界值测试的实际案例及解析 1 边界值测试 人们从长期的测试工作经验得知 大量的错误都是发生在定义域至于 输出
  • Spark机器学习解析

    源码加数据集 文件源码 Gitee好像只收10M一下的文件类型 所以数据集就只能以链接的形式自己下了 KMeans和决策树KDD99数据集 推荐使用10 的数据集 http kdd ics uci edu databases kddcup9
  • vue H5跳转小程序

    官方链接 目录 微信开放文档 摘要 小程序跳转按钮
  • 基于51单片机和霍尔传感器的测速

    项目代码 链接 https pan baidu com s 1vK3i5r0wnks7lWC4yUP8Jg 提取码 vwu0 1 小项目简介 主要采用stc89c51 52单片机作为主控 由霍尔传感器作为测速的基本模块 采用按键控制速度快慢
  • ffmpeg 中 aresample filter 和 scale filter 的创建

    ffmpeg 中 filter 的创建一般需要外部函数创建 可以参考 filter audio c sample 一般 命令行 中 ffmpeg 和 ffplay 也会有相关的 filter 自动创建 ffmpeg 中 filter 的概念
  • Python实现读取目标文件夹数据,并将目标数据复制到指定文件夹

    前言 本文是该专栏的第34篇 后面会持续分享python的各种干货知识 值得关注 假设工作上遇到这样的需求 需要用python读取目标文件夹里面的数据 数据可能包含各种doc文档 pdf文档以及excel文档数据 甚至其它各种类别的类型数据
  • 【Vulnhub】搭建Vulnhub靶机

    一 Vulnhub介绍 Vulnhub它是一个提供各种网络攻防靶场的平台 里面大部分的环境是要用VMware或者VirtualBox打开运行的 二 下载 去vulnhub的官网 https www vulnhub com可以看到各种镜像 点
  • QueryWrapper常用条件介绍

    标题QueryWrapper常用条件介绍 通用条件 比较大小 lt gt gt gt lt lt eq R column Object val 等价于 例 eq name 老王 gt name 老王 ne R column Object v
  • Pytorch Lightning使用:【LightningModule、LightningDataModule、Trainer、ModelCheckpoint】

    pytorch lightning 官方手册 pytorch lightning 官方手册 Welcome to PyTorch Lightning PyTorch Lightning 2 1 0dev documentationhttps
  • /lib64/libm.so.6: version `GLIBC_2.27‘ not found (required by node)

    目录 1 报错场景 2 解决办法 1 报错场景 在centos7 x上面离线安装Node js的时候报错 node lib64 libm so 6 version GLIBC 2 27 not found required by node
  • 【深入理解C++】函数返回类型前置与后置

    文章目录 1 函数返回类型前置 2 函数返回类型后置 1 函数返回类型前置 函数返回类型前置就是把函数返回类型放到函数名字之前 注意 函数定义时 如果形参在函数体内用不到的话 则可以不给形参变量名字 只给其类型 函数声明时 可以只有形参类型
  • 基于BP神经网络的人口预测

    一 人工神经网络 1 1 人工神经元 人工神经元是对生物神经元的模拟 这种信号传输由输入信号x 突触权重 内部阈值 j和输出信号y来模拟 如图 可见 简单神经元的数学表达式为 y f i