感知器算法本算法中,首先将第一类训练样本w1和第二类训练样本w2都写成增广矩阵的形式。W2中的样本都要乘以(-1),所以处理之后的结果为y1~y8。题中给定的权向量初始值W(1)记为X,校正增量系数c=1。程序主体用for循环进行迭代,对每一个样本进行计算y1*X,结果=0时X=X+c*y1'进行校正,结果0时,权向量保持不变,计算个数j+1,每一轮迭代需要与全部8个样本进行计算。当全部样本计算结果0(即某一轮迭代中0的个数j达到8)时,计算中断,表示该轮迭代中分类结果全部正确。此时可以输出解向量,并且可以表示出相应的判别函数。本算法迭代结束时,可得出解向量为(3,-2,-3,1),判别函数为d=3*x1-2*x2-3*x3+1,判别界面即为d=0时。绘制该判别界面时,令d=0,则x3=-Y(1).*x1/Y(3)-Y(2).*x2/Y(3)-Y(4)/Y(3);根据所得解向量进行验证当解向量为(3,-2,-3,1)时全部判别函数值0,可知分类结果正确。本题判别界面的绘制和算法程序如下:symsx1x2x3x4d;X1=[0,0,0];X2=[1,0,0];X3=[1,0,1];X4=[1,1,0];X5=[0,0,1];X6=[0,1,1];X7=[0,1,0];X8=[1,1,1];y1=[X1,1];y2=[X2,1];y3=[X3,1];y4=[X4,1];y5=[-X5,-1];y6=[-X6,-1];y7=[-X7,-1];y8=[-X8,-1];c=1;X=[-1;-2;-2;0];i=1;j=0;fori=1:1000if(y1*X=0)X=X+c*y1';j=0;elsej=j+1;endif(j==8)break;endif(y2*X=0)X=X+c*y2';j=0;elsej=j+1;endif(j==8)break;endif(y3*X=0)X=X+c*y3';j=0;elsej=j+1;endif(j==8)break;endif(y4*X=0)X=X+c*y4';j=0;elsej=j+1;endif(j==8)break;endif(y5*X=0)X=X+c*y5';j=0;elsej=j+1;endif(j==8)break;endif(y6*X=0)X=X+c*y6';j=0;elsej=j+1;endif(j==8)break;endif(y7*X=0)X=X+c*y7';j=0;elsej=j+1;endif(j==8)break;endif(y8*X=0)X=X+c*y8';j=0;elsej=j+1;endif(j==8)break;endendY=zeros(1,4);Y(1)=X(1,1);Y(2)=X(2,1);Y(3)=X(3,1);Y(4)=X(4,1);Yd=x1*Y(1)+x2*Y(2)+x3*Y(3)+Y(4)w1=[0111;0001;0010];w2=[0001;0111;1101];figure(1)scatter3(w1(1,:),w1(2,:),w1(3,:),'r*')holdon;scatter3(w2(1,:),w2(2,:),w2(3,:),'b*')gridon;legend('w1','w2')axis([010101]);x1min=min(min(w1(1,:)),min(w2(1,:)));x1max=max(max(w1(1,:)),max(w2(1,:)));x2min=min(min(w1(2,:)),min(w2(2,:)));x2max=max(max(w1(2,:)),max(w2(2,:)));e=x1min:0.01:x1max;g=x2min:0.01:x2max;[x1,x2]=meshgrid(e,g);x3=-Y(1).*x1/Y(3)-Y(2).*x2/Y(3)-Y(4)/Y(3);mesh(x1,x2,x3);