首页 > 编程语言 > 详细

matlab实现感知机算法

时间:2019-09-29 16:43:50      阅读:332      评论:0      收藏:0      [点我收藏+]

%首先一定要线性可分

%迭代只要分得开。迭代谁都可以,但最后的结果是迭代标签才分得开

 

%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

matlab实现感知机算法

原文:https://www.cnblogs.com/china520/p/11607672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!