Рассчитать матрицу путаницы, учитывая две матрицы Matlab - PullRequest
1 голос
/ 29 марта 2020

У меня есть две матрицы Xval (прогнозируемые значения) и Sv (тест проверки), одна с выходными данными классификатора, а другая с данными проверки для тех же выборок. Каждый столбец представляет прогнозируемое значение, например, [0 0 1 0 0 0 0 0 0 0] представляет di git 3 (1 в di git, то есть). Я хотел бы знать, если возможно вычислить матрицу беспорядка векторизованным способом или со встроенной функцией, размеры обеих матриц 12000x10. Код, который генерирует обе матрицы:

load data;
load test;
[N, m] = size(X);
X = [ones(N, 1) X];
[Nt, mt] = size(Xt);
Xt = [ones(Nt, 1) Xt];
new_order = randperm(N);
X = X(new_order,: );
S = S(new_order,: );
part = 0.8;
Xtr = X(1: (part * N),: );
Xv = X((part * N + 1): N,: );
Str = S(1: (part * N),: );
Sv = S((part * N + 1): N,: );
v_c = [];
v_tx_acerto = [];
tx_acerto_max = 0;
c =  250;
w = (X'*X+c*eye(m+1))\X' * S; 
Xval = Xv*w;
for i=1:12000
    aux = Xval(i,:);
    aux(aux == max(aux)) = 1;
    aux(aux<1) = 0;
    Xval(i,:) = aux;
end

1 Ответ

1 голос
/ 29 марта 2020

Есть встроенные функции confusionmat или plotconfusion . Но если вы хотите иметь полный контроль, вы можете просто написать простую функцию, например:

function [CMat_rel,CMat_abs] = ConfusionMatrix(Cprd,Cact)

Cprd_uq = unique(Cprd);
Cact_uq = unique(Cact);

NumPrd = length(Cprd_uq);
NumAct = length(Cact_uq);
% assert(NumPrd == NumAct)

% allocate memory
CMat_abs = NaN(NumPrd,NumAct);
CMat_rel = NaN(NumPrd,NumAct);
for j = 1:NumAct
    lgAct = Cact == Cact_uq(j);
    SumAct = sum(lgAct);
    for i = 1:NumAct
        lgPrd = Cprd == Cact_uq(i);

        Num = sum( lgPrd(lgAct) == true );
        CMat_abs(i,j) = Num;
        CMat_rel(i,j) = Num/SumAct;
    end
end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...