matlab实现感知机算法统计学习小灶

 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)%分类面
原文地址:https://www.cnblogs.com/weimiaomiao/p/4758769.html