模式识别实验二_第1页
模式识别实验二_第2页
模式识别实验二_第3页
模式识别实验二_第4页
模式识别实验二_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、感知器准则算法1、 实验原理: 假设已知一组容量为N的样本集,其中为维增广样本向量,分别来自和类。如果有一个线性机器能把每个样本正确分类,即存在一个权向量,使得对于任何,都有>0,而对一任何,都有<0,则称这组样本集线性可分;否则称线性不可分。若线性可分,则必存在一个权向量,能将每个样本正确分类。 由上面原理可知,样本集,是线性可分,则必存在某个权向量,使得 如果我们在来自类的样本前面加上一个负号,即令=,其中,则也有>0。因此,我们令那么,我们就可以不管样本原来的类型标志,只要找到一个对全部样本都满足>0,的权向量就行了。此过程称为样本的规范化,成为规范化增广样本向量

2、,后面我们用来表示它。我们的目的是找到一个解向量,使得为此我们首先考虑处理线性可分问题的算法,先构造这样一个准则函数式中是被权向量错分类的样本集合。错分类时有,或因此总是大于等于0。下一步便是求解使达到极小值时的解向量。这里我们采用梯度下降法,首先对求梯度,这是一个纯量函数对向量的求导问题,不难看出梯度是一个向量,其方向是J增长最快的方向,福梯度方向是减小最快的,这指引我们在求准则函数的极小值时沿负梯度方向能最快达到极小值点。梯度下降法的迭代公式为,将上式代入得这样,经过有限次修改,一定能找到一个解向量。其中任意给定权向量。3、 实验内容:实验所需样本数据如下表给出(每个样本空间为两维,x1表

3、示一维的值,x2表示第二维的值),编制程序实现、类的分类。我们将符号简化,把=1。这样,梯度下降算法可以写成其中对任何都有。实验时,=1的情况来找到一个解向量。 感知器算法实验数据样本12345678910W1x10.16.8-3.52.04.13.1-0.80.95.03.9x21.17.1-4.12.72.85.0-1.31.26.44.0W2x17.1-1.44.56.34.21.42.42.58.44.1x24.2-4.30.01.61.9-3.2-4.0-6.13.7-2.2W3x1-3.00.52.9-0.1-4.0-1.3-3.4-4.1-5.11.9x2-2.98.72.15.

4、22.23.76.23.41.65.1W4x1-2.0-8.9-4.2-8.5-6.7-0.5-5.3-8.7-7.1-8.0x2-8.40.2-7.7-3.2-4.2-9.2-6.7-6.4-9.7-6.34、 实验结果及分析:1)梯度下降算法输出结果:a=0;0;0的收敛步骤 a=1;1;1的收敛步骤 a=1;1;1将更快收敛到。由此可见对于同一个样本,权向量的初值会影响到修正时的收敛步数。梯度下降算法:主要程序clear;W1=0.1 6.8 -3.5 2.0 4.1 3.1 -0.8 0.9 5.0 3.9; 1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4

5、4.0;W2=7.1 -1.4 4.5 6.3 4.2 1.4 2.4 2.5 8.4 4.1; 4.2 -4.3 0.0 1.6 1.9 -3.2 -4.0 -6.1 3.7 -2.2;W3=-3.0 0.5 2.9 -0.1 -4.0 -1.3 -3.4 -4.1 -5.1 1.9; -2.9 8.7 2.1 5.2 2.2 3.7 6.2 3.4 1.6 5.1;%将所有训练样本进行规范化增广ww1=ones(1,size(W1,2);W1; ww2=ones(1,size(W2,2);W2;ww3=ones(1,size(W3,2);W3;%对W1、W2训练w12=ww1,-ww2;

6、%增广样本规范化为w12y=zeros(1,size(w12,2); %产生大小为1行,size(x,2)列的矩阵,矩阵元素都是0。a=0;0;0;%初始权向量ak=0;while any(y<=0) for i=1:size(y,2) %y矩阵的列数 y(i)=a'*w12(:,i); %a表示转秩 end; a=a+(sum(w12(:,find(y<=0)')' %修正向量a k=k+1;%收敛步数end;a %显示最终求得的权向量a的值k %迭代次数值subplot(1,2,1);plot(W1(1,:),W1(2,:),'r.');

7、hold on;plot(W2(1,:),W2(2,:),'*');%找到样本在坐标中的集中区域,以便于打印样本坐标图xmin=min(min(W1(1,:),min(W2(1,:);xmax=max(max(W1(1,:),max(W2(1,:);xindex=xmin-1:(xmax-xmin)/100:xmax+1;yindex=-a(2)*xindex/a(3)-a(1)/a(3);plot(xindex,yindex);BP算法实现异或问题一、实验原理 BP算法由于硬限幅函数是非可微函数,不能实现多层神经网络的一种有效的LMS学习算法。而BP算法中所用到的是Sigmo

8、id型函数,它既具有完成分类所需的非线性特性,又具有实现LMS算法所需的可微特性。采用S型函数的神经元的输入和输出之间的关系为: 采用了S型函数就可将用于单神经元的LMS学习算法适当推广,得到一种适用于前向多层神经网络的有效学习算法。我们现在着手研究一个采用S型函数的前向三层神经网络来说明其原理。对于训练样本p,它的输入是N维矢量X,X=,网络的第一,二,三层分别包括J,K,M个神经元,它的总输出是一个M维矢量,Y=,第i层到第i+1层之间的权重系数用来表示。可设前向三层神经网络输出各个分量的理想值是,i=0,1,M-1,而这些分量的实际值是, i=0,1,M-1,理想值和实际值之间的误差是。

9、各输出误差的平方和可以表示为: 现在我们希望改变网络中的各个加权系数,使得尽可能的减小。为此我们可以采取最陡下降算法的公式来调整权重系数。公式如下: 式中的是学习的步幅,它应随学习过程而变化。对于通用神经层,它的各个输出与各个输入之间的关系可以表示为: 如果设,则式中的表示s型函数。我们不难看出上式即为给输入加一个恒等于1部分,在神经网络中也应相应的加一个节点,而且这个节点的权系数就是这一层网络的阈值。我们省去具体的推导过程,下面直接给出结果。(1)对于第三层: (2)对于第二层: (3)对于第一层: 其中: 通过以上公式就可得到三层神经网络的各个权系数的调整量。可见,这一算法的计算过程是先计

10、算第三层(即输出层)的各项“误差分量”,然后用计算第二层(隐含层)的“等效误差分量” ,最后再用计算第一层的“等效误差分量” 。只要算出这些误差分量,系数调整量即可立即求得。所以,这是一种由输出层向输入层逐步反推的学习算法,故称之为“逆推”学习算法,即BP算法。二、实验步骤1、生成训练样本和测试样本。在(1,0)(0,1)(0,0)(1,1)四个点附近各有随机生成服从高斯分布的30个样本,其中20个用作训练,剩下10个用作测试。根据异或问题要求,将(1,0)(0,1)附近的点归为第一组,(0,0)(1,1)附近的点归为第二组。由于有2个类别,对于目标结果,我们用0.9表示第一组,0.1表示第二

11、组。2、样本数据处理。把数据重新打乱顺序进行输入,可以让数据更加具备典型性和更优良的泛化能力。3、建立神经网络,设置网络层数为3层,即输入层、隐层、输出层;输入层神经元数为2,隐层神经元数为5,输出层神经元数为1。4、确定训练函数进行训练。选择适用于模式识别分类时速度最快的弹性算法。5、完成训练后,调用训练结果,输入测试数据进行测试,分析分类结果。三、实验结果及分析运行程序后得到样本(包括训练样本和测试样本),样本如图所示。设定网络误差为0.001,样经过训练,经过30次迭代,得到的满足误差限的网络性能曲线如图所示。对于训练好的满足要求的网络测试剩下40个样本,第1-10个样本在以点(1,0)

12、为中心的区域内,第11-20个样本在以点(0,1)为中心的区域内,第21-30个样本在以点(0,0)为中心的区域内,第31-40个样本在以点(1,1)为中心的区域内,按异或规则,我们希望得到的前20个值在0.9左右,后20个值在0.1左右。测试结果如下,显然与我们期望吻合,故分类正确。 如果我们以Y=0.5为阈值,当Y0.5时,将样本归为第一类,当Y0.5时,将样本归为第二类,则可得到某个满足要求的网络近似分界面,如图所示。上图中,两条点线两侧的区域在此网络中分为第一类,中间所夹的区域为第二类,点线为大致的分界面。显然网络确实可以实现非线性样本特征的分类。异或问题的BP网络分类法程序:clea

13、rn=30;a=1 0;0 1;0 0;1 1;for k=1:4x(n*(k-1)+1):(n*k),1:2)=random('normal',a(k,1),0.05,n,1),random('normal',a(k,2),0.05,n,1); %产生n行1列均值为a(k,1)a(k,2)标准差为0.05的正态分布 %取1至n行,1至2列的数据 x(n*(k-1)+1):(n*k),3)=abs(floor(k/2-0.1)-0.9); %不大于的最大整数endfigure; %画两类样本for i=1:2*n plot(x(i,1),x(i,2),'

14、r+') hold onendfor i=1:2*n plot(x(i+2*n,1),x(i+2*n,2),'b+') hold onendxlabel('x(1)')ylabel('x(2)')title('训练样本')grid onaxis(-0.5 1.5 -0.5 1.5)M=20;%抽取样本训练for k=1:4 for i = 1:M xpt(i+(k-1)*M,:)=x(i+(k-1)*n,:); endend%训练网络xd=xpt(randperm(numel(xpt)/3),:); %P=randperm

15、(N,K)返回一个包含K个在0到N之间的随机元素向量,P=randperm(N)返回一个包含N个在0到N之间产生的随机元素的向量,各行各列重新排P=xd(:,1:2);T=xd(:,3);net=newff(minmax(P'),6,1,'logsig' 'logsig','trainrp'); %创建一个反馈式网络,6为隐含层节点数,1为输出层节点数,'logsig'为输入层到隐含层、隐含层到输出层的传递函数,'trainrp'为输出层的训练函数net.trainparam.epochs=1000; %网

16、络最大收敛次数net.trainparam.goal=0.0001; %收敛误差net=train(net,P',T'); %调用TRAINGND算法训练BP网络sim(net,P') %BP网络进行仿真结果figure %画网络分界面s=100;for i=1:s for j=1:s tt(:,(i-1)*s+j)=i/s;j/s; Y=sim(net,tt(:,(i-1)*s+j); %对bp网络进行仿真 if(abs(Y-0.5)<0.01) plot(i/s,j/s,'b.') hold on end endendgrid ontitle(

17、'网络分界面')N=n-M;%提取测试样本for k=1:4 for i = 1:N x_test(i+(k-1)*N,:) = x(i+(k-1)*n+M,1:2); endendP_p=x_test'Y=sim(net,P_p)Iris数据BP神经网络分类1、 实验原理BP算法由于硬限幅函数是非可微函数,不能实现多层神经网络的一种有效的LMS学习算法。而BP算法中所用到的是Sigmoid型函数,它既具有完成分类所需的非线性特性,又具有实现LMS算法所需的可微特性。采用S型函数的神经元的输入和输出之间的关系为: 采用了S型函数就可将用于单神经元的LMS学习算法适当推广

18、,得到一种适用于前向多层神经网络的有效学习算法。对于训练样本p,它的输入是N维矢量X,X=,网络的第一,二,三层分别包括J,K,M个神经元,它的总输出是一个M维矢量,Y=,第i层到第i+1层之间的权重系数用来表示。可设前向三层神经网络输出各个分量的理想值是,i=0,1,M-1,而这些分量的实际值是, i=0,1,M-1,理想值和实际值之间的误差是。各输出误差的平方和可以表示为: 现在我们希望改变网络中的各个加权系数,使得尽可能的减小。为此我们可以采取最陡下降算法的公式来调整权重系数。公式为: 式中的是学习的步幅,它应随学习过程而变化。对于通用神经层,它的各个输出与各个输入之间的关系可以表示为:

19、 如果设,则式中的表示s型函数。我们不难看出上式即为给输入加一个恒等于1部分,在神经网络中也应相应的加一个节点,而且这个节点的权系数就是这一层网络的阈值。我们省去具体的推导过程,下面直接给出结果。(1)对于第三层: (2)对于第二层: (3)对于第一层: 其中: 通过以上公式就可得到三层神经网络的各个权系数的调整量。可见,这一算法的计算过程是先计算第三层(即输出层)的各项“误差分量”,然后用计算第二层(隐含层)的“等效误差分量” ,最后再用计算第一层(隐含层)的“等效误差分量” 。只要算出这些误差分量,系数调整量即可立即求得。所以,这是一种由输出层向输入层逐步反推的学习算法,故称之为“逆推”学

20、习算法,或BP算法。二、实验步骤1、确定训练样本和测试样本。三类样本各取前30个样本作为训练,剩下的用作测试分类样本。由于有3个类别,我们用2个数表示类别,0.9 0.1表示第一组,0.1 0.9表示第二组,0.9 0.9表示第三组,然后将二进制数组合成目标向量。2、样本数据处理,包括归一化和打乱样本数据顺序。其中把数据重新打乱顺序进行输入,可以让数据更加具备典型性和更优良的泛化能力。3、建立神经网络,设置网络层数为3层,即输入层、隐层、输出层;输入层神经元数为4,隐层神经元数为10,,输出层神经元数为2,隐含层的传输函数为sigmoid函数,输出层传输函数亦为sigmoid函数。4、确定训练

21、函数进行训练。当连续两迭代的梯度方向相同时,可将权值和阈值的修正值乘以一个增量因子,使其修正值增加,当连续两迭代的梯度方向相反时,可将权值和阈值的修正值乘以一个减量因子,使其修正值减小;当梯度为零时,权值和修正值保持不变;当权值的修正发生震荡时,其修正值将减小。5、完成训练后,调用训练结果,输入测试数据,进行测试。6、分析分类结果。三、实验结果及分析三类样本前30个样本训练,设定误差为0.0045,经过1178次迭代,得到的误差性能曲线如图所示。同时得到的统计结果为n1 = 20 n2 = 19 n3 = 18。分类结果如下图所示,图中“+”为第一组测试样本,“*”为第二组测试样本,“*”为第

22、三组测试样本,可以看到第一组测试样本分类完全正确,第二类测试样本有一个样本分到了第三组中,第三组测试样本有2个分到第二组中。对于BP神经网络,只要网络隐层合适,训练的样本有足够的代表性,经训练后的网络能够有效且快捷地解决很多非线性多类样本的模式分类问题,它在工程应用上也取得了很大的成功。但是对于网络层数,接点数、初始权值和学习速率能诸多因素有时还需凭经验确定,另外它所得到的解不唯一,且不能保证得到最优解。Iris数据BP神经网络分类程序:cleariris = load('iris.txt');M=30;for k=1:3 for i = 1:M for j = 1:4 x1(

23、i+(k-1)*M,j) = iris(i+(k-1)*50,j+1); endd1(i+(k-1)*M,1)=abs(mod(k,2)-0.1); %mod两数相除的余数 0.9 0.1 0.9 d1(i+(k-1)*M,2)=abs(floor(k/2)-0.1); 0.9 0.9 0.9 endendx2(:,1:4)=x1;x2(:,5:6)=d1;%训练样本顺序打乱xd=x2(randperm(numel(x2)/6),:);x=xd(:,1:4); d=xd(:,5:6);P,minp,maxp = premnmx(x);%归一化,Pn,minp,maxp,Tn,mint,maxt=premnmx(P,T);P,T分别为原始输入和输出数据,minp和maxp分别为P中的最小值和最大值。mint和maxt分别为T的最小值和最大值。premnmx函数用于将网络的输入数据或输出数据进行归一化,归一化后的数据将分布在-1,1区间内。P=P' T=d'net=newff(minmax(P),12,2,'logsig' 'logsig','trainrp');net.trainparam.epochs=2000;net.trainpara

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论