您的位置:首页 > 编程语言 > MATLAB

感知器算法----Matlab实现

2017-09-19 18:42 706 查看
data=[0 0 -1;0 1 1 ; -1 0 1 ; 1 1 -1];
X = data(:, [1, 2]); y = data(:, 3);
m = size(X,1);
plotData2(X,y);
X = [ones(m,1) X];

error = 1;
W=[0;0;0];
first = 1;
tim=0;
alph=0.1;

hold on
axis([-2 2 -2 2]);
x1=-2:0.2:2;

while error>0
error=0;
for i = 1:m
if ( ((W'*(X(i,:)'))*y(i) <= 0 )|| (first == 1) )
first=0;
error=error+1;
tim=tim+1;
W = W + alph*(X(i,:))'*y(i);
fprintf('%d\n',tim);
if W(3)~=0 && W(2)~=0
y1=-(W(1)/W(3)+W(2)*x1/W(3));
plot(x1,y1,'-b');
end;
end;
end;
end;

if W(3)~=0 && W(2)~=0
y1=-(W(1)/W(3)+W(2)*x1/W(3));
plot(x1,y1,'r');
end;

hold off

function plotData2(X, y)
figure; hold on;

pos = find(y==1) ;
neg = find(y==-1);

fprintf('%d\n\n',pos);

fprintf('%d\n',neg);

% Plot Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, ...
'MarkerSize', 9);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'r', ...
'MarkerSize', 7);

hold off;

end

效果是这样的:



权值为:

-0.100000000000000

-0.300000000000000

0.200000000000000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: