基于matlab实现BP神经网络模型仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于BP神经网络模型及改进模型对全国历年车祸次数预测
一、背景
我国今年来随着经济的发展,汽车需求量不断地增加,所以全国每年的车祸次数也被越来越被关注,本文首先搜集全国历年车祸次数,接着通过这些数据利用BP神经网络模型和改进的径向基函数网络进行预测,最后根据预测结果,分析模型的优劣,从而达到深刻理解BP神经网络和径向基函数网络的原理及应用。文中所用到的数据即全国历年车祸次数来自中国汽车工业信息网,网址如下:
/autoinfo_cn/cszh/gljt/qt/webinfo/2006/05/124650 1820021204.htm
制作历年全国道路交通事故统计表如下所示:
二、问题研究
(一)研究方向
(1)通过数据利用BP神经网络模型预测历年全国交通事故次数并与实际值进行比较。(2)分析BP神经网络模型改变训练函数再进行仿真与之前结果进行对比。
(3)从泛化能力和稳定性等方面分析BP神经网络模型的优劣。
(4)利用径向基函数网络模型进行仿真,得到结果与采用BP神经网络模型得到的结果进行比较。
(二)相关知识
(1)人工神经网络
人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
人工神经网络有以下几个特征:
(1)非线性非线性关系是自然界的普遍特性。大脑的智慧就是一种非线性现象。人工神经元处于激活或抑制二种不同的状态,这种行为在数学上表现为一种非线性网络关系。具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量。
(2)非局限性一个神经网络通常由多个神经元广泛连接而成。一个系统的整体行为不仅取决于单个神经元的特征,而且可能主要由单元之间的相互作用、相互连接所决定。通过单元之间的大量连接模拟大脑的非局限性。联想记忆是非局限性的典型例子。
(3)非常定性人工神经网络具有自适应、自组织、自学习能力。神经网络不但处理的信息可以有各种变化,而且在处理信息的同时,非线性动力系统本身也在不断变化。经常采用迭代过程描写动力系统的演化过程。
(4)非凸性一个系统的演化方向,在一定条件下将取决于某个特定的状态函数。例如能量函数,它的极值相应于系统比较稳定的状态。非凸性是指这种函数有多个极值,故系统具有多个较稳定的平衡态,这将导致系统演化的多样性。
(2)BP神经网络模型
BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。
(3)径向基函数网络模型
径向基函数(Radial Basis Function,RBF)神经网络由三层组成,输入层节点只传递输入信号到隐层,隐层节点由像高斯函数那样的辐射状作用函数构成,而输出层节点通常是简单的线性函数。
隐层节点中的作用函数(基函数)对输入信号将在局部产生响应,也就是说,当输入信号靠近基函数的中央范围时,隐层节点将产生较大的输出,由此看出这种网络具有局部逼近能力,所以径向基函数网络也称为局部感知场网络。
三、建模
第一步:根据数据选定BP神经网络的结构,本文中所用到的BP神经网络模型网络层数为2,隐层神经元数目为10,选择隐层和输出层神经元函数分别为tansig函数和
purelin函数,网络训练方法分别用了梯度下降法、有动量的梯度下降法和有自适
应lr的梯度下降法。
第二步:对输入数据和输出数据进行归一化处理;
第三步:有函数newff()构造神经网络。
第四步:在对神经网络训练之前,首先设定相关参数,例如最大训练次数、训练要求精度、学习率等。
第五步:对BP神经网络进行训练。
第六步:重复训练直到满足要求为止。
第七步:保存训练好的神经网络,并用训练好的神经网络进行预测。
第八步:将预测值和实际输出值进行对比,分析模型的稳定性。
四、仿真
BP网络神经网络模型仿真,matlab源代码如下:
x=[];
y=[];
p=x';t=y';
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
figure(1);
plot(pn,tn,'-');
title('实际输入与实际输出图','fontsize',12)
ylabel('实际输出','fontsize',12)
xlabel('样本','fontsize',12)
net=newff(minmax(pn),[10 1],{'tansig''purelin'},'traingd');
net.trainParam.epochs=50000;
net.trainParam.goal=0.00001;
net.trainParam.lr=0.01;
%net.trainParam.min_grad=1e-50;
net=train(net,pn,tn);
t2=sim(net,pn);
figure(2);
plot(pn,tn,'r',pn,t2,'b');
legend('期望输出','预测输出')
title('预测输出与实际输出对比','fontsize',12) ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
figure(3)
plot(pn,t2,':og');
hold on
plot(pn,tn,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
error=t2-tn;
figure(4)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
figure(5)
plot((tn-t2)./t2,'-*');
title('神经网络预测误差百分比')
errorsum=sum(abs(error))
%输出训练后的权值和阈值
iw1=net.IW{1};
b1=net.b{1};
lw2=net.LW{2};
b2=net.b{2};