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

posted @ 2019-09-29 14:26  丹心静居  阅读(1591)  评论(0编辑  收藏  举报