感知器代码解释

Perceptron code explanation

下面的代码是怎么回事?

function [ errors sepplane ] = perceptron ( pclass , nclass)
    sepplane = rand ( 1 , columns ( pclass ) + 1 ) - 0.5;
    tset = [   ones ( rows ( pclass ), 1 )  pclass ; 
             - ones ( rows ( nclass ), 1 ) -nclass 
           ];
    i = 1;
    do
        misind = tset * sepplane ' < 0;
        correction = sum ( tset ( misind , :), 1 ) / sqrt ( i );
        sepplane = sepplane + correction;
        ++ i;
    until ( norm ( sepplane ) * 0.0005 ) - norm ( correction ) > 0 || i > 1000;

    errors = mean ( tset * sepplane ' < 0);
    dzeros = tvec ( tlab == 1 , :);
    dones = tvec ( tlab == 2 , :);
    perceptron ( dzeros , dones)
end

(0) 为什么这段代码与 有如此大的不同?

(1) 为什么正反类分别排在第一位?那做分类有什么意义呢?

(2) 什么是sepplane

(3) 什么是misind

(4)correction的计算原理是什么?

(0) 为什么这段代码与另一个代码有如此大的不同?

这个感知器可以修改为多class。另一个是严格的二进制classification.

(1) 为什么正负classes分别排在第一位?那么class化有什么意义呢?

这是感知器的训练步骤,所以需要正负样本来学习权重

(2) 什么是sepplane

感知器学习的分离超平面。

(3) 什么是misind

如果示例正确 class 则为 1,否则为 -1。

(4) 校正计算背后的原理是什么?

如果我错误class验证了一个例子,我想调整权重,以便下次我通过感知器 运行 它时可以正确地 class 验证它。