zoukankan      html  css  js  c++  java
  • 固定增量感知器

    感知器的权向量递增公式为 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页
  • 相关阅读:
    【BZOJ】【3004】吊灯
    【BZOJ】【3653】谈笑风生
    【BZOJ】【2500】幸福的道路
    【BZOJ】【3612】【HEOI 2014】平衡
    【BZOJ】【1485】【HNOI2009】有趣的数列
    【BZOJ】【1293】【SCOI2009】生日礼物
    【BZOJ】【1055】【HAOI2008】玩具取名
    【BZOJ】【1053】【HAOI2007】反素数ant
    【BZOJ】【1052】【HAOI2007】覆盖问题
    【BZOJ】【1050】【HAOI2006】旅行comf
  • 原文地址:https://www.cnblogs.com/cutepig/p/1560783.html
Copyright © 2011-2022 走看看