2016-12-26 69 views
-1

下面的代码是怎么回事?感知器代码解释

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)为什么这个代码,以便比this one截然不同?

(1)为什么正面和负面的课程分别通过第一名?那么做分类有什么意义呢?

(2)什么是sepplane

(3)什么是misind

(4)计算correction背后的基本原理是什么?

+0

根据你最近的几个问题,我强烈建议你做更多关于感知器的背景知识。维基百科页面链接到看起来有用的[书籍章节](http://page.mi.fu-berlin.de/rojas/neural/chapter/K3.pdf)。一旦你理解了这个理论,这个代码就是一个直接的实现。 – Cecilia

+0

@ Cecilia,是的。但是,你的回答为我节省了将近24小时。 – anonymous

+0

这不是MATLAB代码 – excaza

回答

1

(0)为什么这段代码与另一段代码差别很大?

这个感知器可以修改为多类。另一个严格用于二进制分类。

(1)为什么正面和负面的课程分别通过第一名?那么做分类有什么意义呢?

这是感知的训练步骤,所以您需要的正面和负面的例子来学习的权重

(2)什么是sepplane

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

(3)什么是misind

如果示例被正确分类,则为1,否则为1。

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

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