Courbe ROC

Contents

Input

function courbeROC(c1,c2,ytest1,proba,predict_label)

Calcul de la matrice de confusion de départ, pour l'affichage sur la courbe du point correspondant au SVM classique (choix de la classe d'appartenance pour un seuil de 0.5).

MCBase = matriceConfusion(ytest1,predict_label,c1,c2);

Evalutation par courbe ROC

Pour la classe c1

NbTest = 100;
ROC = zeros(2,NbTest);
Var = linspace(0,1,NbTest);
for i = 1:NbTest
    prediction = c2*ones(size(ytest1));
    prediction(proba(:,1)>Var(i)) = c1;
    MC = matriceConfusion(ytest1,prediction,c1,c2);
    ROC(1,i) = 1-(MC(1,1)./(MC(1,1)+MC(1,2)));
    ROC(2,i) = (MC(2,2)./(MC(2,1)+MC(2,2)));
end

Affichage de la courbe

figure;
plot(ROC(1,:),ROC(2,:),'r-+');
title(['Courbe ROC Classe ',num2str(c1)]);
hold on;
plot(Var,Var,'b-');

Affichage du SVM seul

ROCBase(1) = 1-(MCBase(1,1)./(MCBase(1,1)+MCBase(1,2)));
ROCBase(2) = (MCBase(2,2)./(MCBase(2,1)+MCBase(2,2)));
plot(ROCBase(1),ROCBase(2),'gd','MarkerSize',10,'LineWidth',2);
legend('SVM Probabilité','Aléatoire','SVM Seul',0);

Pour la classe c2

ROC = zeros(2,NbTest);
for i = 1:NbTest
    prediction = c1*ones(size(ytest1));
    prediction(proba(:,2)>Var(i)) = c2;
    MC = matriceConfusion(ytest1,prediction,c1,c2);
    ROC(2,i) = (MC(1,1)./(MC(1,1)+MC(1,2)));
    ROC(1,i) = 1-(MC(2,2)./(MC(2,1)+MC(2,2)));
end

Affichage de la courbe

figure;
plot(ROC(1,:),ROC(2,:),'r-+');
title(['Courbe ROC Classe ',num2str(c2)]);
hold on;
plot(Var,Var,'b-');

Affichage du SVM seul

ROCBase(2) = (MCBase(1,1)./(MCBase(1,1)+MCBase(1,2)));
ROCBase(1) = 1-(MCBase(2,2)./(MCBase(2,1)+MCBase(2,2)));
plot(ROCBase(1),ROCBase(2),'gd','MarkerSize',10,'LineWidth',2);
legend('SVM Probabilité','Aléatoire','SVM Seul',0);
end