基于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神经网络的人口预测 的相关文章

  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • 两个 y 轴与相同的 x 轴[重复]

    这个问题在这里已经有答案了 可能的重复 在单个图中绘制 4 条曲线 具有 3 个 y 轴 https stackoverflow com questions 1719048 plotting 4 curves in a single plo
  • MATLAB 滚动图

    我有一个脑电图数据库 我想绘制它 数据库是一个19 1000 134的矩阵 其中 19 是通道数 在第一种方法中 我只使用一个渠道 1000 个样本大小 采样率为 500 Hz 时为 1000 个点 即 2 秒数据 134 epochs的数
  • 在 matlab 中求 3d 峰的体积

    现在我有一个带有峰值的 3D 散点图 我需要找到其体积 我的数据来自图像 因此 x 和 y 值表示 xy 平面上的像素位置 z 值是每个像素的像素值 这是我的散点图 scatter3 x y z 20 z filled 我试图找到数据峰值的
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • 两个向量之间的欧氏距离(单行矩阵)

    我有两个向量 单行矩阵 假设我们已经知道长度len A x1 x2 x3 x4 x5 B y1 y2 y3 y4 y5 计算它们之间的欧几里德距离最快的方法是什么 我的第一次尝试是 diff A B sum 0 for column 1 l
  • MATLAB:具有复数的 printmat

    我想使用 MATLAB 的printmat显示带有标签的矩阵 但这不适用于复数 N 5 x rand N 1 y rand N 1 z x 1i y printmat x y z fftdemo N 1 2 3 4 5 x y x iy O
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • 了解 fminunc 参数和匿名函数、函数处理程序

    请多多包涵 问题在最后 我试图找出 fminunc 调用方式的差异 这个问题源于 Andrew Ng 在他的 Coursera 机器学习课程中的第 3 周材料 我正在回答这个问题 Matlab Andrew Ng 机器学习课程中 t cos
  • 对数据进行分布拟合 - MATLAB

    我正在尝试对从显微镜图像中收集的一些数据进行分布 我们知道 152 左右的峰值是由于泊松过程造成的 我想将分布拟合到图像中心的大密度 同时忽略高强度数据 我知道如何将正态分布拟合到数据 红色曲线 但它不能很好地捕获右侧的重尾 尽管泊松分布应
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • matlab中求和函数句柄

    Hi我试图对两个函数句柄求和 但它不起作用 例如 y1 x x x y2 x x x 3 x y3 y1 y2 我收到的错误是 对于 function handle 类型的输入参数 未定义函数或方法 plus 这只是一个小例子 实际上我实际

随机推荐

  • 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