MATLAB(感知器算法).doc
文本预览下载声明
感知器算法
本算法中,首先将第一类训练样本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,可知分类结果正确。
本题判别界面的绘制和算法程序如下:
syms x1 x2 x3 x4 d;
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;
for i=1:1000
if(y1*X=0)
X=X+c*y1;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y2*X=0)
X=X+c*y2;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y3*X=0)
X=X+c*y3;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y4*X=0)
X=X+c*y4;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y5*X=0)
X=X+c*y5;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y6*X=0)
X=X+c*y6;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y7*X=0)
X=X+c*y7;
j=0;
else
j=j+1;
end
if(j==8)
break;
end
if(y8*X=0)
X=X+c*y8;
j=0;
else
j=j+1;
end
if(j==8)
break;
显示全部