用感知器算法求下列模式分类的解向量w:
ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T}
ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T}
ω2: {(0 0 1)T, (0 1 1)T, (0 1 0)T, (1 1 1)T}
使用MATLAB实现该过程:
x=[0,0,0,1;1,0,0,1;1,0,1,1;1,1,0,1;0,0,-1,-1;0,-1,-1,-1;0,-1,0,-1;-1,-1,-1,-1]'
w=[0,0,0,0]'
i=1;j=1;k=0;flag=0;c=1
for i=1:100
for j=1:8
if(w'*x(:,j)<0)
w=w+c*x(:,j);
k=0;
else
k=k+1;
end
if(k==8)
flag=1;
break;
end
end
if(flag==1)
break;
end
end
当解向量w和每一个列向量的乘积都大于0时,就是要求的解向量w,使用break跳出两层for循环,不能连写连个break,第一个break跳出循环之后第二个break不起作用,所以需要一个flag初始值为0,当满足k=8时,给flag赋值为 1,跳出里层循环后,判断flag的值,为1就再次break跳出外层循环。