2 votes

Courbe ROC classification 3 classes avec Matlab

Je dois tracer la courbe ROC à l'aide de Matlab mais mon ensemble de données comprend 3 classes et la plupart des exemples concernent 2 classes. Comment puis-je tracer la fonction ROC pour 3 classes (par exemple, l'ensemble de données de fisher sur l'iris) ?

0voto

saastn Points 307

Voici un exemple qui trace les ROC selon la méthode "1 contre 1" :

%% loading data
load fisheriris
X = meas(:, 1:1); % more features -> higher AUC
Y = species;

%% dividing data to test and train sets
r = randperm(150); trn = r(1:100); tst = r(101:150);

%% train classifier
model = fitcdiscr(X(trn, :),Y(trn));

%% predict labels
% score store likelihood of each sample 
% being of each class: nSample by nClass
[Y2, scores] = predict(model, X(tst, :));

%% plot ROCs
hold on
for i=1:length(model.ClassNames)
    [xr, yr, ~, auc] = perfcurve(Y(tst),scores(:, i), model.ClassNames(i));
    plot(xr, yr, 'linewidth', 1)
    legends{i} = sprintf('AUC for %s class: %.3f', model.ClassNames{i}, auc);
end

legend(legends, 'location', 'southeast')
line([0 1], [0 1], 'linestyle', ':', 'color', 'k');
xlabel('FPR'), ylabel('TPR')
title('ROC for Iris Classification (1 vs Others)')
axis square

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X