固定增量感知器

感知器的权向量递增公式为 a(K+1) = a(k) + sum {yj被错误分类} y(j)

假设我们的线性分割线为穿过原点的45度直线,直线上方的为一类(正), 下方的为另一类
则可以取正样本为 y1= (1, 1.5) , y2 = (2, 2.5), y3 = (-1, -0.5)
对于负样本, 取反的话就可以转变为正样本

初始化解向量为 a=(0,0)
计算a' yi =0, i=1..3, 故所有的模式都错误分类了,
所以 第一次迭代之后, a=y1+y2+y3 = ...

然后开始第二次迭代...

写了一个简单的matlab程序模拟这个过程

y1=[1,1.5]';
y2=[2,2.5]';
y3=[-1,-0.5]';
% y is 2*n matrix
n=3;
y=[y1 y2 y3];

a=[0,0]';

decision = a'*y ;    %用当前解向量对所有模式分类
j=1;
while sum(decision<=0)>0    %如果有错误分类
    decision = a'*y ;
    rej=[];
    for i=1:n    %这个循环计算a(K+1) = a(k) + sum {yj被错误分类} y(j)
        if decision(i)<=0
            a = a + y(:,i);
            rej = [rej i];
        end
    end
    fprintf('after iter %d, a = %g, %g\n', j, a);
    rej
    j = j + 1;
end

程序输出结果为
>> perceptron
after iter 1, a = 2, 3.5

rej =

     1     2     3

after iter 2, a = 1, 3

rej =

     3

after iter 3, a = 0, 2.5

rej =

     3

after iter 4, a = -1, 2

rej =

     3

after iter 5, a = -2, 1.5

rej =

     3

after iter 6, a = 0, 4

rej =

     2

after iter 7, a = -1, 3.5

rej =

     3

after iter 8, a = -2, 3

rej =

     3

after iter 9, a = -2, 3

rej =

     []

>>

最后的解向量为 (-2, 3),表示直线 L(x,y) = -2x+3y
满足L(x,y)>0的为正类, <0的为负类

参考:
模式分类第二版中文版 第188页
原文地址:https://www.cnblogs.com/cutepig/p/1560783.html