perceptron and ANN

 1 %% Perceptron Regression
 2 close all
 3 clear
 4 
 5 %%load data
 6 x = load('ex4x.dat');
 7 y = load('ex4y.dat');
 8 
 9 x=ones(80,2);
10 for i=1:80
11     x(i,1)=mod(i,10);
12     x(i,2)=floor(i/10);
13 end
14 
15 for i=1:80
16     if (x(i,1)+x(i,2))<10
17         y(i)=0;
18     else
19         y(i)=1;
20     end
21 end
22 
23 [m, n] = size(x);
24 
25 % Add intercept term to x
26 x = [ones(m, 1), x];
27 
28 %%draw picture
29 % find returns the indices of the
30 % rows meeting the specified condition
31 pos = find(y == 1);
32 neg = find(y == 0);
33 % Assume the features are in the 2nd and 3rd
34 % columns of x
35 figure('NumberTitle', 'off', 'Name', '感知机');
36 plot(x(pos, 2), x(pos,3), '+');
37 hold on;
38 plot(x(neg, 2), x(neg, 3), 'o');
39 
40 %进行初始化
41 s = 1;                     % 标识符,当s=0时,表示迭代终止
42 n = 0;                     % 表示迭代的次数
43 N = 10000;                 %定义N为最大分类判别次数,判别次数超过此值则认定样本无法分类。
44 w= [0,0,0]';                % 取权向量初始值
45 
46 % 开始迭代
47 while s
48     J = 0;                % 假设初始的分类全部正确
49     for i = 1:size(pos)
50         if (x(pos(i),:)*w)<=0   % 查看x1分类是否错误,在x属于w1却被错误分类的情况下,w'x<0
51             w = w+x(pos(i),:)';% 分类错误,对权向量进行修正
52             J = 1;         % 置错误标志位为1
53         end
54     end
55     for i = 1:size(neg)
56         if (x(neg(i),:)*w)>=0    % 查看x2分类是否错误,在x属于w2却被错误分类的情况下,w'x>0
57             w = w-x(neg(i),:)';% 分类错误,对权向量进行修正
58             J = 1;         % 置错误标志位为1
59         end
60     end
61     if J==0                 % 代价为0,即分类均正确
62         s = 0;              % 终止迭代
63     end
64     n = n+1;            % 迭代次数加1
65     if n == N
66         s=0;
67     end
68 end
69 
70 w=[1;w(2)/w(1);w(3)/w(1)];
71 
72 %%Calculate the decision boundary line
73 plot_x = [min(x(:,2)),  max(x(:,2))];
74 plot_y = (-1./w(3)).*(w(2).*plot_x +w(1));
75 plot(plot_x, plot_y)
76 legend('Admitted', 'Not admitted', 'Decision Boundary')
77 hold off

 

posted on 2017-02-23 20:14  Pkj  阅读(219)  评论(0编辑  收藏  举报

导航