matlab实现感知机算法
%首先一定要线性可分
%迭代只要分得开。迭代谁都可以,但最后的结果是迭代标签才分得开
%code如下
clear all
data=[3 3  1;
      4 3  1;
      1.5 0 1;
      0.5 0.9 1;
      2 1 1;
      0.5 0.5 -1;
      0 0  -1;
      -2 -2  -1;
      -3 0 -1;
      1 3 1]; 
  X=data(:,[1,2])
 
%       X =
% 
%     3.0000    3.0000
%     4.0000    3.0000
%     1.5000         0
%     0.5000    0.9000
%     2.0000    1.0000
%     0.5000    0.5000
%          0         0
%    -2.0000   -2.0000
%    -3.0000         0
%     1.0000    3.0000
 
  y=data(:,3)
  
% y =
% 
%      1
%      1
%      1
%      1
%      1
%     -1
%     -1
%     -1
%     -1
%      1
   m=size(X,1);  % m=样本点个数  10个
   plotData2(X,y);%先在图上将样本画出来
    axis([-4 4 -4 4]);
    hold on
    x1=-4:0.2:4 %x1坐标轴
    
   W=[0;0];   b=0;
   alph=0.5; %学习率
    error=1;
    %Y=[data(:,2),data(:,2)]
    while error>0
        error=0;
       for i=1:m
          if (((W'*X(i,:)'+b)*y(i))<=0)
              error=error+1;
              
               W=W+alph*y(i)*X(i,:)'
            
               b=b+alph*y(i)
               
                     y1=-(W(1)*x1+b) %只是用来绘图的
                     %W(1)
                     %W(2)
                     %b
                 plot(x1,y1,'-b');
                 pause(0.5);
             
           end
       end
    end
plot(x1,y1,'r','Linewidth',3);
    
  function plotData2(X,y)
  figure;hold on;
  pos=find(y==1);
  neg=find(y==-1);  
  plot(X(pos,1),X(pos,2),'+','Linewidth',2,'MarkerSize',9);
  plot(X(neg,1),X(neg,2),'o','MarkerFaceColor','r','Linewidth',2,'MarkerSize',7);
 hold off;
  end
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号