나는 무작위 데이터를 생성하기 위해 간단한 matlab 코드를 가지고 있고 유클리드 (Euclidean)와 마할 라 노비스 (Mahalanobis) 분류기를 사용하여 랜덤 데이터를 분류한다. 내가 겪고있는 문제는 각 분류 자의 오류 결과가 항상 동일하다는 것입니다. 둘 다 항상 같은 벡터를 잘못 분류합니다. 그러나 매번 데이터가 다릅니다.유클리드 (Euclidean) 및 마할 라 노비스 (Mahalanobis) 분류기는 항상 각 분류기에 대해 동일한 오류를 반환합니다.
따라서 데이터를 쉽게 확인하여 결과를 쉽게 확인할 수 있습니다. 우리는 모두 3 가지 클래스를 가질 수 있기 때문에, 각 클래스에 대해 333 개의 임의 값을 생성하고이를 모두 X
에 추가하여 분류 할 수 있습니다. 따라서 결과는 각각 [class 1, class 2, class 3]
이지만 333 개가되어야합니다.
나는 mvnrnd
에 의해 생성 된 데이터가 매번 무작위이며 오류가 변경되는 것을 볼 수 있기 때문에 분류 작업을 알릴 수 있습니다. 그러나 두 분류 기준 사이에서 오류는 변하지 않습니다.
아무도 말할 수 있습니까?
% Create some initial values, means, covariance matrix, etc
c = 3;
P = 1/c; % All 3 classes are equiprobable
N = 999;
m1 = [1, 1];
m2 = [12, 8];
m3 = [16, 1];
m = [m1; m2; m3];
S = [4 0; 0 4]; % All share the same covar matrix
% Generate random data for each class
X1 = mvnrnd(m1, S, N*P);
X2 = mvnrnd(m2, S, N*P);
X3 = mvnrnd(m3, S, N*P);
X = [X1; X2; X3];
% Create the solution array zEst to compare results to
xEst = ceil((3/999:3/999:3));
% Do the actual classification for mahalanobis and euclidean
zEuc = euc_mal_classifier(m', S, P, X', c, N, true);
zMal = euc_mal_classifier(m', S, P, X', c, N, false);
% Check the results
numEucErr = 0;
numMalErr = 0;
for i=1:N
if(zEuc(i) ~= xEst(i))
numEucErr = numEucErr + 1;
end
if(zMal(i) ~= xEst(i))
numMalErr = numMalErr + 1;
end
end
% Tell the user the results of the classification
strE = ['Euclidean classifier error percent: ', num2str((numEucErr/N) * 100)];
strM = ['Mahalanob classifier error percent: ', num2str((numMalErr/N) * 100)];
disp(strE);
disp(strM);
그리고 분류
function z = euc_mal_classifier(m, S, P, X, c, N, eOrM)
for i=1:N
for j=1:c
if(eOrM == true)
t(j) = sqrt((X(:,i)- m(:,j))'*(X(:,i)-m(:,j)));
else
t(j) = sqrt((X(:,i)- m(:,j))'*inv(S)*(X(:,i)-m(:,j)));
end
end
[num, z(i)] = min(t);
end