【数学建模】matlab| BP神经网络入门学习

这篇具有很好参考价值的文章主要介绍了【数学建模】matlab| BP神经网络入门学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


提示:以下本章里有大量作者自己的口水话和心里对白,请谨慎观看,若有不适,后果自负!

一、很简单的BP神经网络例题——公路运量预测

这部分学习内容以及代码参考(抄袭)了教材《matlab在数学建模中的应用》(第二版 主编:卓金武),加入了大量我自己的思考内容。若侵删。这本书是从教研室的80年代大书柜里面找出来的,应该是师姐姐姐姐或者师哥哥哥哥留下的。

1.1.题目描述

题目描述如下所示:
【数学建模】matlab| BP神经网络入门学习
【数学建模】matlab| BP神经网络入门学习
使用神经网络工具箱,解题matlab代码如下所示:

clc;
close all;
clear all;
%数据
sqrs=[20.55,22.44,25.37,27.13,29.45,30.10,30.96,34.06,36.42,38.09,39.13,39.99...
    41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];%人数
sqjdcs=[0.6,0.75,0.85,0.9,1.05,1.35,1.45,1.6,1.7,1.85,2.15,2.2,2.25,2.35,2.5,2.6...
    2.7,2.85,2.95,3.1];%机动车数
sqglmj=[0.09,0.11,0.11,0.14,0.20,0.23,0.23,0.32,0.32,0.34,0.36,0.36,0.38,0.49...
    0.56,0.59,0.59,0.67,0.69,0.79];%公路面积
glkyl=[5126,6217,7730,9145,10460,11387,12353,15750,18304,19836,21024,19490,20433....
    22598,25107,33442,36836,40548,42927,43462];%公路客运量
glhyl=[1237,1379,1385,1399,1663,1714,1834,4322,8132,8936,11099,11203,10524,11115....
    13320,16762,18673,20724,20803,21804];%公路货运量

%输入数据矩阵 3*20
p=[sqrs;sqjdcs;sqglmj];
%目标数据矩阵 2*20
t=[glkyl;glhyl];

%归一化
[pn,input_str]=mapminmax(p);
[tn,output_str]=mapminmax(t);

%建立BP神经网络
net=newff(pn,tn,[3 7 2],{'purelin','logsig','purelin'});
net.trainParam.show=10;%每十次显示一次结果
net.trainParam.lr=0.05;%设置学习率
net.trainParam.epochs=5000;%最大训练次数为5000
net.trainParam.goal=0.65*10^(-3);%目标误差
net.divideFcn='';  %所有样本用以训练
net=train(net,pn,tn);%开始训练
%仿真
an=sim(net,pn);%使用训练好的网络进行仿真
a=mapminmax('reverse',an,output_str);%对数据反归一化,恢复原貌

%画图
x=1990:2009;
newk=a(1,:);%网络输出客运量
newh=a(2,:);%网络输出货运量
figure(2);
%公路客运量对比图
subplot(2,1,1);
plot(x,newk,'r-o',x,glkyl,'b--+');
legend('网络输出客运量','实际客运量');
xlabel('年份');ylabel('客运量/万吨');
title('客运量对比图')
%公路货运量对比图
subplot(2,1,2);
plot(x,newh,'r-o',x,glhyl,'b--+');
legend('网络输出货运量','实际货运量');
xlabel('年份');ylabel('货运量/万吨');
title('货运量对比图')

%使用网络进行预测
pnew=[73.39,75.55
    3.9635 4.0975
    0.9880,1.0268];
pnewn=mapminmax('apply',pnew,input_str);%
anewn=sim(net,pnewn);
anew=mapminmax('reverse',anewn,output_str);

1.2.题目分析

本题中,给出了三个自变量:人数(sqrs),机动车数量(sqjdcs),公路面积(sqglmj);同时给出了两个因变量:公路客运量(glkyl),公路货运量(glhyl).
在大数据的情况下,会不会存在一种规律,也就是三个自变量取不同的值,那么因变量就会给出对应的值?BP神经网络的作用就是来干这个的。

1.3.代码分析

以前,我可能是个调参侠,现在,一定要细枝末节的问题弄明白。

1.3.1 数据输入

输入数据这个比较简单,没有什么太难理解的地方。就是每次输数据的时候有点累(不过肯定有那种比较简单的方法,比如直接从EXCEL里面导入的方法,只是我还没学到)
一般来说,输入矩阵一般是行向量(至少在这本书里是这样);自变量一般都全部需要放到一起,也就是叠罗汉叠在一起嘛(就比如把三个1×20的行向量叠成3×20的矩阵)。p=[sqrs;sqjdcs;sqglmj];里面打这个;相当于就是换行到下一行的意思了哈(在我心里是这样的)。
同理,目标矩阵也是一样的做法。把二个1×20的行向量叠成2×20的矩阵

1.3.2 归一化

老实说,好久没看深度学习里面的基础内容,现在第一眼看到归一化我真忘了咋操作的了。。这就赶紧复习一下什么是归一化,顺便做几个小实验。

归一化定义:把一系列数据压到【0,1】或者【-1,1】
归一化的好处:消除量纲的影响,同时消除奇异样本的影响,方便计算!(奇异样本就是一些很有个性的数据,它比大家大很多或者又小很多)
啥时候用归一化?:在网上查找资料后得到,一般存在奇异样本的时候,就需要归一化,否则可以不需要(奇异数据可能导致模型一直无法拟合)
matlab如何归一化?在题中,使用了mapminmax函数解决的

使用mapminmax函数进行归一化,把数据压至【-1,1】
正好来做个实验吧,就以本题为例了。
mapminmax介绍:对矩阵每一行进行归一化
mapminmax调用格式:[pn,input_str]=mapminmax(p);,这只是其中一种调用格式,也是本题的调用格式,其他调用格式也懒得写了,到时直接百度即可。其中p是输入的矩阵,pn是归一化后的矩阵,input_str包含了一大堆数据中的信息(包括最大值最小值那些),一时半会我也讲不清楚,就做实验的时候截个图看看就懂了。

实验:对本题中的人数数据(行向量)进行归一化

sqrs=[20.55,22.44,25.37,27.13,29.45,30.10,30.96,34.06,36.42,38.09,39.13,39.99...
    41.93,44.59,47.30,52.89,55.73,56.76,59.17,60.63];%人数
[pn,input_str]=mapminmax(sqrs);

归一化后结果:【数学建模】matlab| BP神经网络入门学习
从数据中我们可以看出,20.55和60.63分别是最小和最大的数据,他们充当了【-1,1】里面排头兵的作用。
那我们再看看input_str:
【数学建模】matlab| BP神经网络入门学习
包含了很多有趣的信息

1.3.3 构建BP神经网络

这里差不多是算整个代码里的重头戏了,里面也有很多细节和问题。

%建立BP神经网络
net=newff(pn,tn,[3 7 2],{'purelin','logsig','purelin'});
net.trainParam.show=10;%每十次显示一次结果
net.trainParam.lr=0.05;%设置学习率
net.trainParam.epochs=5000;%最大训练次数为5000
net.trainParam.goal=0.65*10^(-3);%目标误差
net.divideFcn='';  %所有样本用以训练
net=train(net,pn,tn);%开始训练
%仿真
an=sim(net,pn);%使用训练好的网络进行仿真
a=mapminmax('reverse',an,output_str);%对数据反归一化,恢复原貌

其实一行一行看,也没啥问题,关键是,这些数值为啥要设成这样?只有慢慢分析了

首先,newff()用来搭建BP神经网络函数。这里的pn指的输入数据,相当于深度学习里的样本(具体名字我搞忘了,西瓜书里有写);tn是输出数据,相当于深度学习里的标签;net是构建出的网络,和python里是不是有异曲同工之妙?;【3,7,2】是隐藏层的层数和神经元个数,这里表示有三层,每层分别有3,7,2个神经元。后面这个{‘purelin’,‘logsig’,‘purelin’}表示的是每层隐藏层的激活函数,purelin是线性函数,logsig就是sigmoid函数。这里我们把图花一下,看看长啥样?:

purelin画图代码:

x=[-10:10];
y=purelin(x);
plot(x,y,'b-o')
title('线性激活函数图')

【数学建模】matlab| BP神经网络入门学习

logsig画图代码:

x=[-10:10];
y=logsig(x);
plot(x,y,'r-o')
title('logsig激活函数图')

【数学建模】matlab| BP神经网络入门学习

那么问题来了:隐藏层为什么是这么多层?每一层为什么是这么个数量的神经元?每一层用的激活函数为什么是这个?
其实我也不太清楚,但是在这道题中我大概能理解它为什么。(练多了就知道了)

net.trainParam是神经网络工具箱里用来设置训练参数的。后面的仿真相当于是测试集,还有反归一化也要弄懂。仿真的作用就是通过数据层面把网络的性能能力展示出来。

1.3.4 画图

这里画图画的是仿真的数据,以及真实数据的对比
具体内容没啥难度,熟练了就行。
其中有个语法提一下

newk=a(1,:);%网络输出客运量
newh=a(2,:);%网络输出货运量

这里的意思是分别取矩阵a第一行或者第二行的数据。如果是a(:,1),就是取矩阵a第一列的信息。
最后得到的对比图:
【数学建模】matlab| BP神经网络入门学习
可以看出,实际数据和预测数据还是有一定偏差的。

1.3.5 使用网络进行预测

仿真是拿存在的数据进行的,而预测则是拿不存在的数据进行

%使用网络进行预测
pnew=[73.39,75.55
    3.9635 4.0975
    0.9880,1.0268];
pnewn=mapminmax('apply',pnew,input_str);%
anewn=sim(net,pnewn);
anew=mapminmax('reverse',anewn,output_str);

这里用到了mapminmax的另外一种调用格式。'apply’表示使用之前的参数input_str.

1.3.6 神经网络工具箱

程序运行完毕后还会弹出神经网络工具箱的界面:
【数学建模】matlab| BP神经网络入门学习
这个参数具体含义改天来介绍吧 今天写累了

二、练习题——使用BP神经网络预测美国人口

2.1.问题简介

可以参考我上一篇博客

2.2实现代码

代码如下(示例):

clc;
close all;
clear all;
%数据
p=[1790:10:1980];

t=[301,320,352,371,390.5,412.8,432,400,358,364,380,430,438,447,...
    444,450,547,667,818,981];

%归一化
[pn,input_str]=mapminmax(p);
[tn,output_str]=mapminmax(t);

%建立BP神经网络
net=newff(pn,tn,[1 3 1],{'purelin','logsig','purelin'});
net.trainParam.show=10;%每十次显示一次结果
net.trainParam.lr=0.01;%设置学习率
net.trainParam.epochs=5000;%最大训练次数为5000
net.trainParam.goal=0.65*10^(-3);%目标误差
net.divideFcn='';  %让程序继续运行
net=train(net,pn,tn);%开始训练
%仿真
an=sim(net,pn);%使用训练好的网络进行仿真
a=mapminmax('reverse',an,output_str);%对数据反归一化,恢复原貌

%画图
x=1790:10:1980;
figure(2);
subplot(2,1,1);
plot(x,a,'r-o',x,t,'b--+');
legend('拟合','实际 ');
xlabel('年');ylabel('人数');
title('对比图')
%预测
pnew=[1990 2000 2010 2020 2030];
pnewn=mapminmax('apply',pnew,input_str);%
anewn=sim(net,pnewn);
anew=mapminmax('reverse',anewn,output_str);

x=1990:10:2030;
subplot(2,1,2);
plot(x,anew,'r-o');
xlabel('年');ylabel('人数');

实现结果如图:

【数学建模】matlab| BP神经网络入门学习文章来源地址https://www.toymoban.com/news/detail-489312.html


到了这里,关于【数学建模】matlab| BP神经网络入门学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模-基于LightGBM和BP神经网络的互联网招聘需求分析与预测

    整体求解过程概述(摘要)    就业是民生之本,是发展之基,也是安国之策。2020 年新冠肺炎疫情的爆发,稳就业成为应对疫情、稳定社会的重要保障之一。随着数据新动能的发展,互联网招聘为招聘者和应聘者提供不限于时空的全局视角,因此本文从该角度出发对招聘者和

    2024年03月23日
    浏览(42)
  • Matlab数学建模算法之小波神经网络详解

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 🔐####  防伪水印——左手の明天 #### 🔐 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享

    2024年02月20日
    浏览(44)
  • 数学建模-MATLAB神经网络工具箱实现数据拟合预测

    将数据集保存在矩阵data中 在APP页面找到Neural Net Fitting 3.输入与目标均为 data,Samples are 选择 Matrix rows 4.训练集和验证集的百分比可以自定义,一般默认 三种算法,各有优劣,一般默认第一个,点击Train进行训练 4.点击Performance 5.以此图为例,13.1572代表误差,误差越低越好,可

    2024年02月06日
    浏览(34)
  • 神经网络模型--数学建模

    目录 1.神经网络模型简介 2.神经网络在数学建模中用途 3.神经网络在数学建模中应用案例 3.1交通流量预测 3.2 股票价格预测 3.3图像识别 3.4自然语言处理 3.5智能控制   神经网络是一种人工智能算法,它受到了生物神经网络的启发。类似于生物神经网络,神经网络也由许多相互

    2024年02月01日
    浏览(39)
  • 数学建模——人工神经网络模型

       1943年心理学家McCulloch和数学家Pitts提出神经元生物数学模型(M-P模型),后来人工神经网络(Artifical Neural Network,ANN)是在生物神经网络(Biological Neural Network,BNN)基础上发展起来的,是对人脑的某种抽象、简化和模拟,是模拟人的智能的一种途径。     神经元是神经网络的基本

    2024年02月08日
    浏览(34)
  • 2023年神经网络与数学建模:原理、实现与案例

    在本博客中,我们将探讨神经网络这一模拟人脑神经元结构的计算模型,以及如何将其应用于数学建模。我们将详细解释神经网络的原理、使用 MATLAB 实现神经网络,并提供一个数学建模案例。博客内容如下: 目录 1. 神经网络简介 2. 神经网络的数学原理 2.1 前向

    2024年02月07日
    浏览(42)
  • 2023年9月数学建模博客:深度学习与多层神经网络

    目录 1. 深度学习简介 2. 多层神经网络基本原理 2.1 激活函数

    2024年02月07日
    浏览(38)
  • BP神经网络预测实例(matlab代码,神经网络工具箱)

    参考学习b站资源: 数学建模学习交流 bp神经网络预测matlab代码实现过程 神经网络简介 可在github下载(含原始样品数据): https://github.com/chenshunpeng/BP-neural-network 最早的神经网络模型, 单层感知器perceptron,结构如下: 这是一个两层的神经网络,第一层为输入层,第二层为输

    2024年02月12日
    浏览(33)
  • BP神经网络优化 | MATLAB基于遗传算法优化BP神经网络(GA-BP)的预测模型(含完整代码)

    文章目录 前言 一、遗传算法描述 二、优化思路 三、完整代码 预测结果  首先需要安装一下遗传算法工具箱,可参考这篇博客 MATLAB遗传算法工具箱安装包及安装方法(图解)_周杰伦今天喝奶茶了吗的博客-CSDN博客_matlab遗传算法工具箱安装 本模型可以结合自己的数据集进行

    2024年02月02日
    浏览(40)
  • Matlab预测模型-BP神经网络模型

    训练集(Training set) —— 用于模型拟合的数据样本。 验证集(Validation set) —— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。在神经网络中,我们用验证数据集去寻找最优的网络深度,或者决定反向传播算法的停止

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包