首页 > 代码库 > 感知器算法(二分类问题)

感知器算法(二分类问题)

下面是实验结果:

main.m
<span style="font-family:Times New Roman;font-size:14px;">data=http://www.mamicode.com/[0 0 0;0 1 1;1 0 1;1 1 2;2 1 1;1 2 3;2 2 4;3 2 1];>
perceptron.m
<span style="font-family:Times New Roman;font-size:14px;">function [w, mis_class] = perceptron(X,t)  
% The perceptron algorithm   
%by LiFeiteng   email:lifeiteng0422@gmail.com  
%   X : D*N维输入数据  
%   t : {+1,-1}标签  
%     
%   w : [w0 w1 w2]     
%   mis_class : 错误分类数据点数  
  
%  对t做简单的检查  
if size(unique(t),2)~=2  
    return  
elseif max(t)~=1  
    return  
elseif min(t)~=-1  
    return  
end  
  
[dim num_data] = size(X);  
w = ones(dim+1,1);%%w = [w0 w1 w2]'  
X = [ones(1,num_data); X];  
maxiter = 1000;  
mis_class = 0;  
iter = 0;  
  
while iter<maxiter  
    iter = iter+1;  
    y = w'*X;  
    label = ones(1, num_data);%{+1,-1}  
    label(y<=0) = -1;    
    index = find(label~=t); %错误分类的点  
    mis_class = numel(index); %错误分类点的数目     
    if mis_class==0  
        break  
    end  
    for i = 1:mis_class  
        w = w + X(:,index(i))*t(index(i));  
    end  
end  
if iter==maxiter  
    disp(['达到最大迭代次数' num2str(maxiter)])  
end  </span>


感知器算法(二分类问题)