感知器代码解释
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 验证它。
下面的代码是怎么回事?
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 验证它。