资源描述
(完整word)实验四Matlab神经网络及应用于近红外光谱的汽油辛烷值预测
实验四 Matlab神经网络以及应用于汽油辛烷值预测
一、实验目的
1. 掌握MATLAB创建BP神经网络并应用于拟合非线性函数
2. 掌握MATLAB创建REF神经网络并应用于拟合非线性函数
3。 掌握MATLAB创建BP神经网络和REF神经网络解决实际问题
4. 了解MATLAB神经网络并行运算
二、实验原理
2。1 BP神经网络
2。1.1 BP神经网络概述
BP神经网络Rumelhard和McClelland于1986年提出。从结构上将,它是一种典型的多层前向型神经网络,具有一个输入层、一个或多个隐含层和一个输出层。层与层之间采用权连接的方式,同一层的神经元之间不存在相互连接。理论上已经证明,具有一个隐含层的三层网络可以逼近任意非线性函数。
隐含层中的神经元多采用S型传递函数,输出层的神经元多采用线性传递函数。图1所示为一个典型的BP神经网络.该网络具有一个隐含层,输入层神经元数据为R,隐含层神经元数目为S1,输出层神经元数据为S2,隐含层采用S型传递函数tansig,输出层传递函数为purelin.
图1 含一个隐含层的BP网络结构
2。1。2 BP神经网络学习规则
BP网络是一种多层前馈神经网络,其神经元的传递函数为S型函数,因此输出量为0到1之间的连续量,它可以实现从输入到输出的任意的非线性映射。由于其权值的调整是利用实际输出与期望输出之差,对网络的各层连接权由后向前逐层进行校正的计算方法,故而称为反向传播(Back—Propogation)学习算法,简称为BP算法。BP算法主要是利用输入、输出样本集进行相应训练,使网络达到给定的输入输出映射函数关系。算法常分为两个阶段:第一阶段(正向计算过程)由样本选取信息从输入层经隐含层逐层计算各单元的输出值;第二阶段(误差反向传播过程)由输出层计算误差并逐层向前算出隐含层各单元的误差,并以此修正前一层权值.
BP网络的学习过程主要由以下四部分组成:
1)输入样本顺传播
输入样本传播也就是样本由输入层经中间层向输出层传播计算。这一过程主要是
输入样本求出它所对应的实际输出。
① 隐含层中第i个神经元的输出为
② 输出层中第k个神经元的输出为:
其中f1(·), f2 (·)分别为隐含层和输出层的传递函数。
2)输出误差逆传播
在第一步的样本顺传播计算中我们得到了网络的实际输出值,当这些实际的输出值与期望输出值不一样时,或者说其误差大于所限定的数值时,就要对网络进行校正.
首先,定义误差函数
E(w,b)=
其次,给出权值的变化
① 输出层的权值变化
从第i个输入到第k个输出的权值为:
其中:
,
② 隐含层的权值变化
从第j个输入到第i个输出的权值为:
(η为学习系数)
其中:
由此可以看出:①调整是与误差成正比,即误差越大调整的幅度就越大。②调整量与输入值大小成比例,在这次学习过程中就显得越活跃,所以与其相连的权值的调整幅度就应该越大,③调整是与学习系数成正比。通常学习系数在0。1~0.8之间,为使整个学习过程加快,又不会引起振荡,可采用变学习率的方法,即在学习初期取较大的学习系数随着学习过程的进行逐渐减小其值.
最后,将输出误差由输出层经中间层传向输入层,逐层进行校正。
2。1.3 BP神经网络的训练
对BP网络进行训练时,首先要提供一组训练样本,其中每个样本由输入样本和输出对组成.当网络的所有实际输出与其期望输出小于指定误差时,训练结束。否则,通过修正权值,使网络的实际输出与期望输出接近一致(图2)。
实际上针对不同具体情况,BP网络的训练有相应的学习规则,即不同的最优化算法,沿减少期望输出与实际输出之间误差的原则,实现BP网络的函数逼近、向量分类和模式识别。
图2 神经网络的训练
2。2 RBF神经网络
2.2.1 RBF神经网络概述
1985年,Powell提出了多变量插值的径向基函数(Radical Basis Function, RBF)方法。1988年,Moody和Darken提出了一种神经网络结构,即RBF 神经网络,属于前向神经网络类型,它能够以任意精度逼近任意连续函数,特别适合于解决分类问题。
RBF网络的结构与多层前向网络类似,它是一种三层前向网络。输入层由信号源节点组成;第二层为隐含层,隐单元数视所描述问题的需要而定,隐单元的变换函数RBF()是对中心点径向对称且衰减的非负非线性函数;第三层为输出层,它对输入模式的作用作出响应。从输入空间到隐含层空间的变换是非线性的,而从隐含层空间的输出层空间变换是线性的。
RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入向量直接(即不需要通过权接)映射到隐空间。当RBF的中心点确定以后,这种映射关系也就确定了。而隐含层空间到输出空间的映射是线性的,即网络的输出是隐单元输出的线性加权和。此处的权即为网络可调参数。由此可见,从总体上看,网络由输入到输出的映射是非线性的,而网络输出对可调参数而言却又是线性的。这样网络的权就可由线性方程直接解出,从而大大加快学习速度并避免局部极小问题.
径向基神经网络的神经元结构如图3所示。径向基神经网络的激活函数采用径向基函数,通常定义为空间任一点到某一中心之间欧氏距离的单调函数。由图3所示的径向基神经元结构可以看出,径向基神经网络的激活函数是以输入向量和权值向量之间的距离作为自变量的。径向基神经网络的激活函数(高斯函数)的一般表达式为
图3 径向基神经元模型
随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出1。在图3中的b为阈值,用于调整神经元的灵敏度。利用径向基神经元和线性神经元可以建立广义回归神经网络,该种神经网络适用于函数逼近方面的应用;径向基神经元和竞争神经元可以组建概率神经网络,此种神经网络适用于解决分类问题。
由输入层、隐含层和输出层构成的一般径向基神经网络结构如图4所示。
图4 径向基神经网络结构
2.2。2 RBF神经网络的学习算法
径向基函数网络是由输入层,隐含层和输出层构成的三层前向网络(以单个输出神经元为例),隐含层采用径向基函数作为激活函数,该径向基函数一般为高斯函数,隐含层每个神经元与输入层相连的权值向量和输入矢量(表示第q个输入向量)之间的距离乘上阈值 ,作为本身的输入(图5).
图5 径向基神经网络神经元的输入与输出
由此可得隐含层的第个神经元的输入为:
输出为:
径向基函数的阈值可以调节函数的灵敏度,但实际工作中更常用另一参数C(称为扩展常数)。和C的关系有多种确定方法,在MATLAB神经网络工具箱中,和C的关系为,此时隐含层神经元的输出变为:
在MATLAB神经网络工具箱中,C值用参数spread表示,由此可见,spread值的大小实际上反映了输出对输入的响应宽度。spread值 越大,隐含层神经元对输入向量的响应范围将越大,且神经元间的平滑度也较好.
输出层的输入为各隐含层神经元输出的加权求和。由于激活函数为纯线性函数,因此输出为:
RBF网络的训练过程分为两步:第一步为无教师式学习,确定训练输入层与隐含层间的权值;第二步为有教师式学习,确定训练隐含层与输出层间的权值。在训练以前需要提供输入向量、对应的目标向量和径向基函数的扩展常数C。训练的目的是求取两层的最终权值,和阈值,。
在RBF网络训练中,隐含层神经元数量的确定是一个关键问题,简便的做法是使其与输入向量的个数相等(称为精确(exact) RBF).显然,在输入向量个数很多时,过多的隐含层单元数是难以让人接受的。其改进方法是从1个神经元开始训练,通过检查输出误差使网络自动增加神经元.每次循环使用,使网络产生的最大误差所对应的输入向量作为权值向量,产生一个新的隐含层神经元,然后检查新网络的误差,重复此过程直到达到误差要求或最大隐含层神经元数为止(称为近似(approximate) RBF).
2。3 RBF神经网络与BP神经网络的比较
在理论上,RBF网络和BP网络一样能以任意精度逼近任何非线性函数.但由于它们使用的激活函数不同,其逼近性能也不相同。Poggio和Girosi已经证明,RBF网络是连续函数的最佳逼近,而BP网络不是。BP网络使用的Sigmoid函数具有全局特性,它在输入值的很大范围内每个节点都对输出值产生影响,并且激活函数在输入值的很大范围内相互重叠,因而相互影响,因此BP网络训练过程很长。此外,由于BP算法的固有特性,BP网络容易陷入局部极小的问题不可能从根本上避免,并且BP网络隐层节点数目的确定依赖于经验和试凑,很难得到最优网络。采用局部激活函数的RBF网络在很大程度上克服了上述缺点,RBF不仅有良好的泛化能力,而且对于每个输入值,只有很少几个节点具有非零激活值,因此只需很少部分节点及权值改变。学习速度可以比通常的BP算法提高上千倍, 容易适应新数据,其隐含层节点的数目也在训练过程中确定,并且其收敛性也较BP网络易于保证,因此可以得到最优解。
2.4 BP神经网络与RBF神经网络的MATLAB实现
2。4.1 BP神经网络的相关函数
(1) newff: BP神经网络参数设置函数
函数功能:构建一个BP神经网络
函数形式:net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)
P: 输入数据矩阵(训练集的输入向量作为列构成的矩阵)
T: 输出数据矩阵(训练集的期望向量作为列构成的矩阵)
S: 隐合层节点数
TF: 节点传递函数,包括硬限幅传递函数hardlim,对称硬限幅传递函数hardlims,线性传递函数purelin,正切S型传递函数tansig,对数S型传递函数logsig。
BTF:训练函数,包括梯度下降BP算法训练函数traingd,动量反传的梯度下降BP算法训练函数traingdm.动态自适应学习率的梯度下降BP算法训练函数traingda,动量反传和动态自适应学习率的梯度下降BP算法训练函数traingdx、Levenberg_Marquardt的BP算法训练函数trainlm。
BLF: 网络学习函数,包括Bp学习规则learngd、带动量项的BP学习规则learngdm.
PF: 性能分析函数,包括均值绝对误差性能分析函数mae、均方差性能分析函数mse.
IPF: 输入处理函数。
OPF: 输出处理函数。
DDF: 验证数据划分函数。
一般在使用过程中设置前面6个参数,后面4个参数采用系统默认参数。
注意:Matlab R2011a之后的版本开始用新函数feedforwardnet替代函数newff, 其用法为
feedforwardnet(hiddenSizes,trainFcn)
hiddenSizes:隐含层神经元个数,默认为10,若是多个隐含层,这是没有隐含层神经元个数组成的行向量;
trainFcn:训练函数,默认为 'trainlm')
(2) train: BP神经网络训练函数
函数功能:用训练数据训练BP神经网络。
函数形式:[net,tr]=train(NET, X, T, Pi, Ai)
NET: 待训练网络
X: 输入数据矩阵
T: 输出数据矩阵
Pi: 初始化输入层条件
Ai:初始化输出层条件
net: 训练好的网络
tr: 训练过程记录
一般在使用过程中设置前面3个参数,后面2个参数采用系统默认参数。
(3) sim: BP神经网络预测函数
函数功能:用训练好的BP神经网络预测函数输出。
函数形式:y=sim(net, x)
net: 训练好的网络。
x: 输入数据。
y: 网络预测数据。
2.4。2 RBF神经网络的相关函数
(1) newrb
该函数可以用来设计一个近似(approximate)径向基网络。其调用格式为
[net,tr]=newrb(X, T, GOAL, SPREAD, MN, DF)
其中,X为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q维矩阵;GOAL为均方误差目标(Mean Squared Error Goal),默认为0。0;SPREAD为径向基函数的扩展速度,默认为1,MN为神经元的最大数目,默认为Q;DF为两次显示之间所添加的神经元数目,默认为25;net为返回值 ,一个RBF网络,tr为返回值,训练记录。
用newrb()创建RBF网络是一个不断尝试的过程,在创建过程中,需要不断增加中间层神经元和个数,直到网络的输出误差满足预先设定的值为止。
(2) newrbe()
该函数用于设计一个精确(exact)径向基网络,其调用格式为
net=newrbe(X, T, SOREAD)
其中,X为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q维矩阵;SPREAD为径向基函数的扩展速度,默认为1。
和newrb()不同,newrbe()能够基于设计向量快速,无误差地设计一个径向基网络。适合输入向量个数较少的情形。
(3) radbas()
该函数为径向基传递函数。其调用格式为
A=radbas(N)
Info=radbas(code)
其中,N为输入(列)向量的S*Q维矩阵;A为函数返回矩阵,与N一一对应,即N中的每个元素通过径向基函数得到A;info=radbas(code)表示根据code值的不同返回有关函数的不同信息。包括
derive-——-—返回导函数的名称
name———-—-返回函数全称.
output---—返回输入范围.
active -—-——返回可用输入范围.
2。5神经网络并行运算
MATLAB并行运算工具箱可以将神经网络仿真计算并行化,从而减少运算时间.行
化的实现是将整个训练数据集拆分到(多核)计算机不同的worker上,整个数据集的运。
算结果为合并后的所有worker的计算值。
进行神经网络的并行运算,需要先打开matlabpool,同时将神经网络train与sim函数中的useparallel参数设置为yes
%% 打开MATLAB workers
matlabpool open
% 检查worker数量
poolsize=matlabpool(’size')
%% 设置train与sim函数中的参数“Useparallel”为“yes”.
net2=train(net1,x,t,'Useparallel',’yes')
y=sim(net2,x,'Useparallel',’yes’)]
三、实验内容
1. 建立BP神经网络拟合非线性函数
第一步 数据选择和归一化
根据非线性函数方程随机得到该函数的2000组数据,将数据存贮在data.mat文件中(下载后拷贝到Matlab当前目录),其中input是函数输入数据,output是函数输出数据。从输入输出数据中随机选取1900中数据作为网络训练数据,100组作为网络测试数据,并对数据进行归一化处理。
%% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归一化
%载入输入输出数据
load data input output
%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);
%找出训练数据和预测数据
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900));
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
第二步 建立和训练BP神经网络
构建BP神经网络,用训练数据训练,使网络对非线性函数输出具有预测能力。
%%构建和训练BP神经网络
% BP神经网络构建
net=newff(inputn,outputn,5);
%网络参数配置(迭代次数,学习率,目标)
net。trainParam.epochs=100;
net.trainParam.lr=0.1;
net。trainParam。goal=0。00004;
%网络训练,并记录训练时间
tic
net=train(net,inputn,outputn);
t1=toc
disp([’神经网络的训练时间为’,num2str(t1),'秒']);
第三步 BP神经网络预测
用训练好的BP神经网络预测非线性函数输出。
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply’,input_test,inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
第四步 结果分析
通过BP神经网络预测输出和期望输出分析BP神经网络的拟合能力。
%% 结果分析
figure(1)
plot(BPoutput,’:og’)
hold on
plot(output_test,’-*');
legend('预测输出’,’期望输出')
title('BP网络预测输出','fontsize’,12)
ylabel('函数输出','fontsize’,12)
xlabel(’样本','fontsize',12)
%预测误差
error=BPoutput—output_test;
figure(2)
plot(error,'-*’)
title('BP网络预测误差',’fontsize’,12)
ylabel('误差’,'fontsize',12)
xlabel(’样本’,'fontsize’,12)
figure(3)
plot((output_test-BPoutput)./BPoutput,’—*');
title('神经网络预测误差百分比')
errorsum=sum(abs(error));
2。 建立RBF神经网络拟合非线性函数
第一步 建立exact RBF神经网络拟合, 观察拟合效果
% RBF网络的回归-—非线性函数回归的实现
%% 清空环境变量
clc
clear
%% 产生输入 输出数据
% 设置步长
interval=0.01;
% 产生x1 x2
x1=—1。5:interval:1.5;
x2=-1.5:interval:1。5;
% 按照函数先求得相应的函数值,作为网络的输出。
F =20+x1。^2-10*cos(2*pi*x1)+x2.^2—10*cos(2*pi*x2);
%% 网络建立和训练
% 网络建立 输入为[x1;x2],输出为F.Spread使用默认。
net=newrbe([x1;x2],F)
%% 网络的效果验证
% 将原数据回带,测试网络效果:
ty=sim(net,[x1;x2]);
% 使用图像来看网络对非线性函数的拟合效果
figure
plot3(x1,x2,F,'rd’);
hold on;
plot3(x1,x2,ty,’b—.’);
view(113,36)
title(’可视化的方法观察准确RBF神经网络的拟合效果’)
xlabel(’x1')
ylabel('x2')
zlabel(’F')
grid on
第二步 建立approximate RBF神经网络拟合
% RBF网络的回归—-非线性函数回归的实现
clc
clear
%% 产生训练样本(训练输入,训练输出)
% ld为样本例数
ld=400;
% 产生2*ld的矩阵
x=rand(2,ld);
% 将x转换到[-1。5 1。5]之间
x=(x-0。5)*1。5*2;
% x的第一行为x1,第二行为x2.
x1=x(1,:);
x2=x(2,:);
% 计算网络输出F值
F=20+x1.^2—10*cos(2*pi*x1)+x2。^2—10*cos(2*pi*x2);
%% 建立RBF神经网络
% 采用approximate RBF神经网络。spread为默认值
net=newrb(x,F);
%% 建立测试样本
% generate the testing data
interval=0。1;
[i, j]=meshgrid(—1。5:interval:1。5);
row=size(i);
tx1=i(:);
tx1=tx1';
tx2=j(:);
tx2=tx2';
tx=[tx1;tx2];
%% 使用建立的RBF网络进行模拟,得出网络输出
ty=sim(net,tx);
%% 使用图像,画出3维图
% 真正的函数图像
interval=0。1;
[x1, x2]=meshgrid(-1。5:interval:1。5);
F = 20+x1.^2-10*cos(2*pi*x1)+x2。^2—10*cos(2*pi*x2);
subplot(1,3,1)
mesh(x1,x2,F);
zlim([0,60])
title('真正的函数图像’)
% 网络得出的函数图像
v=reshape(ty,row);
subplot(1,3,2)
mesh(i,j,v);
zlim([0,60])
title('RBF神经网络结果')
% 误差图像
subplot(1,3,3)
mesh(x1,x2,F—v);
zlim([0,60])
title(’误差图像')
set(gcf,'position',[300 ,250,900,400])
讨论题:对于非线性函数
(1)分别建立BP神经网络和RBF神经网络拟合并比较两者的性能差异。
(2)就BP神经网络验证单线程运算和并行运算的运行时间差异。
3。 应用实例:基于近红外光谱的汽油辛烷值预测
问题描述
辛烷值是汽油最重要的品质指标,传统的实验室检测方法存在样品用量大、测试周期长和费用高等问题,不适用与生产控制,特别是在线测试,今年发展起来的近红外光谱分析方法(NIR),作为一种快速分析方法,已经广泛应用于农业、制药、生物化工、石油产品等领域。其优越性是无损检测、低成本、无污染、能在线分析,更适合于生产和控制的需要。
针对采集得到的60组汽油样品,利用傅立叶近红外变换光谱仪对其扫描,扫描范围为900~1700nm,扫描间隔为2nm,每个样品的光谱曲线共含有401个波长点.同时,利用传统实验室检测方法测定其辛烷值含量。现要求利用BP神经网络及RBF神经网络分别建立汽油样品近红外光谱与其辛烷值之间的关系的数学模型,并对模型的性能进行评价.
解题思路及步骤
依据问题描述中的要求,实现BP神经网络及RBF神经网络的模型建立及性能评价,大体上可以分为以下几个步骤:
1)产生训练集/测试集
为了保证建立的模型具有良好的泛化能力,要求训练集样本足够多,且具有良好的代表性。一般认为,训练集样本数量占总体样本数量的2/3~3/4为宜,剩余的1/4~1/3作为测试集样本.同事,尽量使得训练集与测试集样本的分布规律近似相同。
2)创建/训练BP神经网络
创建BP神经网络需要确定网络的结构,即需要确定以下几个参数:输入变量个数、隐函数层数及个层神经元个数、输出变量个数。从问题描述中可知,输入变量个数为401,输出变量个数为1。隐含层一个(可逼近任意非线性函数),隐含层神经元的个数对BP神经网络的性能影响较大。若隐含层神经元的个数较少,则网络不能充分描述输出和输入变量之间的关系;相反,若隐含层神经元的个数较多,则会导致网络的学习时间变长,甚至会出现过拟合的问题。一般地, 确定隐含层神经元个数的方法实在经验公式的基础上,对比隐含层不同神经元个数对模型性能的影响,从而进行选择.
网络结构确定后,设置相关训练参数(如训练次数、学习率等),便可以对网络进行训练.
3)创建/训练RBF神经网络
创建RBF神经网络时需要考虑spread的值对网络性能的影响。一般而言,spread的值越大,函数的拟合就越平滑。然而,过大的spread值将需要非常多的神经元以适应函数的快速变化;反之,若spread值太小,则意味着需要许多的神经元来适应函数的缓慢变化,从而导致网络性能不好。
4)仿真测试
模型建立后,将测试集的输入变量送入模型,模型的输出就是对应的预测结果。
5)性能评价
通过计算测试集预测值与真实值间的误差,可以对模型的泛化能力进行评价。在此基础上,可以进行进一步的研究和改善。
MATLAB程序实现
第一步 产生训练集/测试集
60个样品的光谱及辛烷值数据保存在spectra_data。mat文件中,该文件包含两个变量矩阵:NIR为60行401列的样品光谱数据,octane为60行1列的辛烷值数据。这里采用随机法产生训练集和测试集,随机产生50个样品作为训练集,剩余的10个样品作为测试集.程序如下:
%%清空环境变量
clear all
clc
%% 训练集/测试集产生
%导入数据
load spectra_data。mat
% 随机产生训练集和测试集
temp = randperm(size(NIR,1));
% 训练集——50个样本
P_train = NIR(temp(1:50),:)';
T_train = octane(temp(1:50),:)’;
% 测试集-—10个样本
P_test = NIR(temp(51:end),:)’;
T_test = octane(temp(51:end),:)';
N = size(P_test,2);
说明:
(1)由于训练集/测试集产生的随机性,每次运行的结果均有可能不同。
(2)函数randperm(n)用于产生一个长度为n的正整数随机序列。
第二步 创建/训练BP神经网络及仿真测试
利用MATLAB神经网络自带工具箱的函数,可以方便的进行BP神经网络创建、训练及仿真测试。在训练之前,可以对相关的训练参数进行设置,也可以采取默认设置.程序如下:
%% BP神经网络创建、训练及仿真测试
% 创建网络
net = newff(P_train,T_train,9);
% 设置训练参数
net.trainParam。epochs = 1000;
net。trainParam。goal = 1e-3;
net.trainParam.lr = 0。01;
% 训练网络
net = train(net,P_train,T_train);
% 仿真测试
T_sim_bp = sim(net,P_test);
第三步 创建RBF神经网络及仿真测试
利用MATLAB神经网络自带工具箱的函数,可以方便的进行RBF神经网络创建、训练及仿真测试。程序如下:
%% RBF神经网络创建及仿真测试
% 创建网络
net = newrbe(P_train,T_train,0.3);
% 仿真测试
T_sim_rbf = sim(net,P_test);
第四步 性能评价
BP神经网络及RBF神经网络仿真测试结束后,通过计算预测值与真实值的偏差情况,可以对网络的泛化能力。采用两个评价指标,分别为相对误差和决定系数,其计算公式分别为
,
其中()为第个样品的预测值;为第个样品的真实值;为样品数目。
相对误差越小,表明模型的性能越好。决定系数范围在[0,1]内,越接近于1,表明模型的拟合性能越好,反之,越趋近于0,表明模型的拟合性能越差。程序如下:
%% 性能评价
% 相对误差error
error_bp = abs(T_sim_bp - T_test)./T_test;
error_rbf = abs(T_sim_rbf - T_test)。/T_test;
% 决定系数R^2
R2_bp = (N * sum(T_sim_bp .* T_test) - sum(T_sim_bp) * sum(T_test))^2 / ((N * sum((T_sim_bp)。^2) - (sum(T_sim_bp))^2) * (N * sum((T_test)。^2) - (sum(T_test))^2));
R2_rbf = (N * sum(T_sim_rbf 。* T_test) - sum(T_sim_rbf) * sum(T_test))^2 / ((N * sum((T_sim_rbf)。^2) — (sum(T_sim_rbf))^2) * (N * sum((T_test).^2) — (sum(T_test))^2));
% 结果对比
result_bp = [T_test’ T_sim_bp’ T_sim_rbf' error_bp’ error_rbf’]
第五步绘图
为了更为直观地对结果进行观察和分析,以图片的形式将结果呈现出来。程序如下:
%% 绘图
figure
plot(1:N,T_test,’b:*',1:N,T_sim_bp,’r-o',1:N,T_sim_rbf,’k—.^’)
legend(’真实值’,'BP预测值’,'RBF预测值’)
xlabel(’预测样本')
ylabel('辛烷值')
string = {'测试集辛烷值含量预测结果对比(BP vs RBF)';[’R^2=' num2str(R2_bp) ’(BP)’ ' R^2=' num2str(R2_rbf) ’(RBF)']};
title(string)
讨论题:网络参数的影响及其选择
隐含层神经元的个数对BP神经网络的性能影响较大。若隐含层神经元的个数较少,则网络不能充分描述输出和输入变量之间的关系;相反,若隐含层神经元的个数较多,则会导致网络的学习时间变长,甚至会出现过拟合的问题。一般地, 确定隐含层神经元个数的方法实在经验公式的基础上,对比隐含层不同神经元个数对模型性能的影响,从而进行选择。
具体方法:隐含层神经元个数分别3~10个时,程序运行10次,求出对应的决定系数的平均值.平均值最大对应的隐含层神经元个数即为最佳选择。(自己编程求出最佳值,并画出隐含层神经元个数——-决定系数图形)
对于RBF神经网络,一般而言,spread的值越大,函数的拟合就越平滑。然而,过大的spread值将需要非常多的神经元以适应函数的快速变化;反之,若spread值太小,则意味着需要许多的神经元来适应函数的缓慢变化,从而导致网络性能不好.
具体方法:当spread值分别为0.1,0。2,…,0。9,1时程序运行10次,求出对应的决定系数的平均值。平均值最大对应的spread值即为最佳选择。(自己编程求出最佳值,并画出spread值———决定系数图形)
四、实验心得
要求:写出实验过程中的收获与体会;遇到的困难和解决办法
展开阅读全文