模式识别感知器算法matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
给定样本如下:
X4)={(1,1,0),(0,1,0)} 使用matlab 编 制程序如下: X1=[1,0,1];X2=[0,1,1];X3=[1,1,0];X4=[0,1 ,0]; %规格化 y1=[X1,1];y2=[X2,1];y3=[-X3,-1];y4=[- X4,-1]; %初始化给定一个广义权重矢量及步长 c=1;X=[1;1;1;1];i=1;j=0; %循环迭代若连续四次计算均可判别则跳出for(i=1:1000) if(y1*X<=0) X=X+c*y1'; j=0; else j=j+1; end if(j==4) break; end if(y2*X<=0) X=X+c*y2'; j=0; else j=j+1; end if(j==4) break; end if(y3*X<=0) X=X+c*y3'; j=0; else j=j+1; end if(j==4) break; end if(y4*X<=0) X=X+c*y4'; j=0; else j=j+1; end if(j==4) break; end end %输出 Y=zeros(1,3); Y(1)=X(1,1);Y(2)=X(2,1);Y(3)=X(3,1); Y X(4,1) 运行程序,结果如下: Y = 0 -1 3 ans = 0 带回运算,知该判别函数可以分出两类。 实验三程序过于重复,改写程序体如下: x1=[1,0,1];x2=[0,1,1];x3=[1,1,0];x4=[0,1,0]; y1=[x1,1];y2=[x2,1];y3=[-x3,-1];y4=[-x4,-1]; %将增光规范化的矩阵写成一个y=[y1;y2;y3;y4]; c=1;X=[1;1;1;1];k=0;i=1;j=0; %大循环控制运行迭代的步数for(i=1:2000) % 内循环用于计算处理判断 for(j=1:4) if(y(j,:)*X<=0) X=X+c*y(j,:)'; k=0; else k=k+1; end if(k==4) break; end end if(k==4) break; end end X' 运行程序,得出结果一致: 实验四:感知器算法在多类问题中的应用 给定的试验样本数据如下表所示: 表1:实验所用样本数据 使用matlab编制程序,程序体如下: x1= [0.1;1.1;1];x2二[7.1;4.2;1];x3二[-3.0;-2.9;1];x4二[-2.0;- 8.4;1]; %规范化的增广矩阵 w=[0 0 0;0 0 0;0 0 0;0 0 0]; y=[x1,x2,x3,x4]; %正常数p,步数k p=1;k=1; %W存储中间矩阵 Wq=zeros(1,4); %开始大循环,其中k作为标记 while k==1 k=0;%初始时置k为0 % 此循环用于求取判别函数 for(i=1:4) while Wq(i)<4 if(w(i,:)*y(:,i)<=0) w(i,:)=w(i,:)+p*y(:,i)'; Wq(i)=0; else Wq(i)=Wq(i)+1; continue; end end end % 此循环用于判别调整增广权重矢量 for(i=1:4) d=w(i,:)*y(:,i); for(j=1:4) if(i==j) continue; elseif(w(j,:)*y(:,i) continue; else w(i,:)=w(i,:)+p*y(:,i)'; w(j,:)=w(j,:)-p*y(:,i)'; k=1; end end end % 条件语句,判别是否有过增广权值矢量调整if(k==1) continue; else % 若没有调整,则检验各判别函数对杨门能否正确分类for(i=1:4) if(w(i,:)*y(:,i)>0) k=k+1; else k=1; break; end end end end %给出判别的样本增广矩阵以及求得的增广权值矢量矩阵y w 输出为: 运行程序, y = 0.1000 7.1000 -3.0000 -2.0000 1.1000 4.2000 - 2.9000 -8.4000 1.0000 1.0000 1.0000 1.0000 w = 0.2000 2.2000 2.0000 7.0000 3.1000 0 -10.0000 -3.2000 3.0000 5.0000 -8.1000 -1.0000 编写验证程序,程序体如下: x1=[0.1;1.1;1];x2=[7.1;4.2;1];x3=[-3.0;-2.9;1];x4=[ -2.0;- 8.4;1];y=[x1,x2,x3,x4]; w=[0.2,2.2,2.0;7.0,3.1,0;-10.0,-3.2,3.0;5.0,-8.1,-1 .0]; %样本矩阵和求得的增广权值矢量矩阵 q=zeros(4,4); %c矩阵用于存储各个权值矢量与样本的乘积 %循环存储 for(i=1:4) for(j=1:4) q(i,j)=w(j,:)*y(:,i); end end %输出求得的乘积矩阵q 运行结果如下: q = 4.4400 4.1100 -1.5200 -9.4100 12.6600 62.7200 -81.4400 0.4800 -4.9800 -29.9900 42.2800 7.4900 -16.8800 -40.0400 49.8800 57.0400 根据感知器算法在多类问题算法的规则,样本与自身对应的增广权矢量乘积大于样本与其他的增广权矢量的乘积: 即如果X k€ 3和d i(X k)> d j(X k)(任意j工i),贝y: w(k+1)=w( k) ( i =1,2,…c) 贝M矩阵的对角线上的值应当为同行中的最大,观察q可见,满足条