1 clear all; 2 clc; 3 %% 4 %算法 5 %输入:训练数据集T = {(x1,y1),(x2,y2),...,(xn,yn)};学习率η 6 %输出:w,b;感知机模型f(x) = sign(w*x+b) 7 %(1)选取初值w0,b0 8 %(2)在训练集中选取数据(xi,yi) 9 %(3)如果yi(w*xi+b)<=0 10 % w = w+η*yi*xi 11 % b = b+ηyi 12 %(4)转至(2),直至训练集中没有误分类点 13 %% 14 15 %初始化 16 X = [3 3 1;4 3 1;1 1 -1];%训练集 17 [sn,fn] = size(X); 18 y = X(:,fn);%标签 19 X(:,fn) = []; 20 fn = fn-1; 21 w = zeros(2,1); 22 b = 0; 23 yta = 1;%参数η 24 ok = 0; 25 %% 26 %循环体 27 while(ok==0)%%%不断的扫描直到所有的实例都满足无误分类点才结束 28 for i = 1:sn 29 if (y(i)*(w'*X(i,:)'+b)<=0) 30 31 w = w + yta*y(i)*X(i,:)' 32 b = b + yta*y(i) 33 else 34 if(i == sn) ok=1; 35 break 36 end 37 end 38 end 39 end 40 41 %% 42 %图示 43 figure(1) 44 plot(X(1,:),X(2,:),'r.') 45 hold on 46 plot(X(3,:),'*') %样本 47 xmin=min(X(:,1)); 48 xmax=max(X(:,1)); 49 % ymin=min(X(:,2)); 50 % ymax=max(X(:,2)); 51 xindex=xmin-1:(xmax-xmin)/100:xmax+1; 52 yindex=w(1)*xindex+w(2)*xindex+b; 53 plot(xindex,yindex)%分类面