Das Problem ist bei Ihrem Beispiel, dass es möglich ist, Null und Null , daher wird die Genauigkeit undefiniert, weil wir durch Null teilen. Aus diesem Grund enthält die PR-Kurve nur Punkte für einen Wert, und daher wird die Fläche unter der PR-Kurve für Ihr Beispiel Null.tpfpprec=tp/(tp+fp)x
Sie können dies sehen, indem Sie die PR-Kurve zeichnen:
[X,Y,T,PR] = perfcurve(label,score,1, 'xCrit', 'reca', 'yCrit', 'prec') % PR = 0
figure
scatter(X,Y)
xlabel('recall')
ylabel('precision')
Das Zeichnen einer PR-Kurve funktioniert also nicht wirklich gut, wenn alle Ihre Ergebnisse gleich sind.
Vergleichen Sie diese beiden Vorhersagelisten, um mehr Einblicke zwischen der Differenz der PR-Kurve und der ROC-Kurve zu erhalten. Wir betrachten den Fall, in dem wir alle Nullen vorhersagen und eine 1 vorhersagen, aber es sollte Null sein (Punktzahl1). Dieser funktioniert nicht sehr gut, er sagt überall 0 voraus, außer bei einem Objekt, bei dem er 1 vorhersagt, wo er Null sein sollte. Wir betrachten einen anderen Fall, in dem wir eine 1 korrekt vorhersagen und den Rest als 0 klassifizieren. Hier prognostizieren wir also 1 richtig und den Rest als 0. Wir vergleichen die Fläche unter der PR-Kurve und die Fläche unter dem ROC .
outlier = 1;
normal = 0;
% 99% normal data 1% outlier
label = normal*ones(1000,1);
label(1:10) = outlier;
%label = real( rand(1000,1) > 0.99 ); % 99% normal data 1% outlier
score1 = [zeros(999,1);1]; % predict everything as zero, and one mistake
score2 = [1;zeros(999,1)]; % predict everything as zero, and one 1 correct
[X,Y,T,AUC1] = perfcurve(label,score1,1)
% AUC1 = 0.5
[X,Y,T,AUC2] = perfcurve(label,score2,1)
% AUC2 = 0.55
[X,Y,T,PR1] = perfcurve(label,score1,1, 'xCrit', 'reca', 'yCrit', 'prec')
% PR1 = 0.005
[X,Y,T,PR2] = perfcurve(label,score2,1, 'xCrit', 'reca', 'yCrit', 'prec')
% PR2 = 0.4545
Beachten Sie, dass die AUC zwischen Score1 und Score2 kaum variiert. Die Fläche unter der PR-Kurve unterscheidet sich jedoch erheblich. Es belohnt Score2 viel mehr als Score1. Dies zeigt an, dass es besser für die Erkennung von Ausreißern geeignet ist: Es belohnt die Erkennung des Ausreißers viel mehr als die AUC. Im Falle einer Ausreißererkennung würden Sie Score2 viel mehr bevorzugen, da er die 1 vorhersagt, die Sie korrekt erkennen möchten, während Score1 eine 1 für eine Null vorhersagt und niemals Ausreißer fängt.
Im Allgemeinen ist die AUC informativer, um eine Vorstellung davon zu geben, wie gut Ihre Vorhersagen für verschiedene Prioritäten funktionieren. Somit charakterisiert die AUC, wie gut der Klassifikator für die variierende Anzahl von Einsen und Nullen funktioniert.
Die PR-Kurven zeigen besser an, wie sie sich für das aktuell betrachtete Klassenungleichgewicht verhalten. Daher ist die PR-Kurve für Sie interessanter: Sie berücksichtigt, dass Ihr Datensatz nur kleine Einsen als Nullen enthält. Da Sie an diesem Fall nur interessiert sind, wenn Sie an der Erkennung von Ausreißern interessiert sind, ist die PR-Kurve informativer.
Während die AUC charakterisiert, wie Ihre Vorhersagen funktionieren würden, wenn es auch viel mehr Einsen gibt.
Weitere Informationen finden Sie auch unter:
https://www.quora.com/What-is-Precision-Recall-PR-curve
ROC vs. Präzisions- und Rückrufkurven
Schließlich könnte Sie interessieren, wie eine ROC / PR-Kurve berechnet wird. Eine ausführliche Erläuterung der ROC-Kurven finden Sie hier:
http://blogs.sas.com/content/iml/2011/07/29/computing-an-roc-curve-from-basic-principles.html