%首先一定要线性可分
%迭代只要分得开。迭代谁都可以,但最后的结果是迭代标签才分得开
%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
|
请发表评论