Wie berechnet man Roc-Kurven?

8

Ich schreibe einen Klassifikator (Gaussian Mixture Model), um fünf menschliche Handlungen zu klassifizieren. Für jede Beobachtung berechnet der Klassifikator die spätere Wahrscheinlichkeit, zu einem Cluster zu gehören.

Ich möchte die Leistung meines mit einem Schwellenwert parametrisierten Systems mit Werten von 0 bis 100 bewerten. Für jeden Schwellenwert, für jede Beobachtung, wenn die Wahrscheinlichkeit, zu einem Cluster zu gehören, größer als der Schwellenwert ist, akzeptiere ich das Ergebnis des Klassifikators andernfalls verwerfe ich es.

Für jeden Schwellenwert berechne ich die Anzahl von richtig-positiv, richtig-negativ, falsch-positiv, falsch-negativ.

Dann berechne ich die zwei Funktionen: Sensitivität und Spezifität als

%Vor%

In Matlab:

%Vor%

um die ROC-Kurve zu haben. Aber das Ergebnis ist nicht das, was ich erwarte.

Dies ist der Plot der Funktionen von Rückwürfen, Fehlern, Korrektionen, Sensitivität und Spezifität, die die Schwelle einer Aktion variieren.

Dies ist der Plot der ROC-Kurve einer Aktion

Dies ist der Stamm der ROC-Kurve für die gleiche Aktion

Ich irre mich, aber ich weiß nicht wo. Vielleicht mache ich die Berechnung von FP, FN, TP, TN falsch, besonders wenn das Ergebnis des Klassifikators kleiner ist als der Schwellenwert, also habe ich einen Ausschuss. Was muss ich inkrementieren, wenn es einen Abwurf gibt?

    
Mario Lepore 19.10.2012, 18:26
quelle

2 Antworten

4

Hintergrund

Ich antworte darauf, weil ich den Inhalt durcharbeiten muss, und eine Frage wie diese ist eine gute Ausrede. Danke für die gute Gelegenheit.

Ich verwende Daten aus den integrierten Fischer-Iris-Daten: Ссылка

Ich verwende auch Codefragmente aus dem Mathworks-Tutorial zur Klassifizierung und für plothroc

Problembeschreibung

Es gibt eine klarere Grenze innerhalb der Domäne, um "setosa" zu klassifizieren, aber es gibt Überschneidungen für "versicoloir" vs. "virginica". Dies ist eine zweidimensionale Darstellung, und einige der anderen Informationen wurden verworfen, um sie zu erzeugen. Die Zweideutigkeit in den Klassifikationsgrenzen ist in diesem Fall eine nützliche Sache.

%Vor%

Analyse

Nehmen wir an, wir wollen die Grenzen für einen linearen Klassifikator bestimmen, der "virginica" gegen "nicht-virginica" definiert. Wir könnten für andere Klassen "Selbst gegen Nicht-Selbst" betrachten, aber sie würden ihre eigenen

haben

Also machen wir jetzt einige lineare Diskriminanten und zeichnen die ROC für sie auf:

%Vor%

Das Ergebnis wird im Folgenden gezeigt, obwohl das Löschen von Wiederholungskopien der Diagonale erforderlich war:

Sie können im Code notieren, dass ich "myinput" und "myoutput" staple und sie als Eingaben in die "plotroc" -Funktion füttere. Sie sollten die Ergebnisse Ihres Klassifikators als Ziele und Istwerte verwenden und ähnliche Ergebnisse erzielen. Dies vergleicht die tatsächliche Ausgabe Ihres Klassifikators mit der idealen Ausgabe Ihrer Zielwerte. Das sind die Eingaben für plotroc.

Das wird Ihnen also "eingebaute" ROC geben, die für schnelle Arbeit nützlich ist, aber Sie nicht jeden Schritt im Detail lernen lassen.

Fragen, die Sie an dieser Stelle stellen können, sind:

  • welcher Klassifikator ist der beste? Wie bestimme ich, was in diesem Fall am besten ist?
  • Was ist die konvexe Hülle der Klassifikatoren? Gibt es eine Mischung von Klassifikatoren, die aussagekräftiger ist als jede reine Methode? Bagging vielleicht?
EngrStudent 27.12.2013 17:20
quelle
-1

Sie versuchen, die Kurven der Genauigkeit vs des Abrufs abhängig vom Schwellenparameter des Klassifikators zu zeichnen. Die Definition von Präzision und Erinnerung sind:

%Vor%

Sie können die Definition dieser Parameter überprüfen in: Ссылка

Hier gibt es einige Kurven: Ссылка

Teilen Sie Ihren Datensatz im Trainingssatz, Kreuzvalidierungssatz und Testsatz? (Wenn Sie die Daten nicht teilen, ist es normal, dass Ihre Präzisions-Recall-Kurve seltsam erscheint)

EDITED: Ich denke, dass es zwei mögliche Quellen für Ihr Problem gibt:

  1. Wenn Sie einen Klassifikator für 5 Klassen trainieren, müssen Sie normalerweise 5 verschiedene Klassifikatoren trainieren. Ein Klassifikator für (Klasse A = Klasse 1, Klasse B = Klasse 2, 3, 4 oder 5), dann ein zweiter Classfier für (Klasse A = Klasse 2, Klasse B = Klasse 1, 3, 4 oder 5), .. und der fünfte für Klasse A = Klasse 5, Klasse B = Klasse 1, 2, 3 oder 4).

Wie Sie gesagt haben, um die Ausgabe für Ihren "zusammengesetzten" Klassifikator auszuwählen, müssen Sie Ihren neuen (Test-) Datenpunkt durch die fünf Klassifikatoren leiten und Sie wählen den mit der größten Wahrscheinlichkeit.

Dann sollten Sie 5 Schwellenwerte haben, um Gewichtungswerte zu definieren, die nach meiner Priorität einen Klassifizierer gegenüber den anderen auswählen. Sie sollten überprüfen, wie die Matlab-Implementierungen die Schwellenwerte verwenden. Sie bewirken jedoch, dass Sie nicht die Klasse mit höherer Wahrscheinlichkeit auswählen, sondern die Klasse mit besser gewichteter Wahrscheinlichkeit.

  1. Wie Sie vielleicht sagen, berechnen Sie nicht gut TP, TN, FP, FN. Ihre Testdaten sollten Datenpunkte enthalten, die zu allen Klassen gehören. Dann haben Sie testdata (i, :) und classtestdata (i) sind der Merkmalsvektor und "Ground Truth" -Klasse von Datenpunkt i. Wenn Sie den Klassifikator auswerten, erhalten Sie classifierOutput (i) = 1 oder 2 oder 3 oder 4 oder 5. Dann sollten Sie die "Verwechslungsmatrix" berechnen, die die Berechnung von TP, TN, FP und FN für mehrere Klassen ist (& gt; 2): Ссылка Ссылка (Beachten Sie die Beziehung zwischen TP, TN, FP, FN, die Sie für das Multiklassenproblem berechnen)

Ich denke, dass Sie die TP-, TN-, FP-, FN-Daten jedes Unterklassifizierers (denken Sie daran, dass Sie 5 separate Klassifikatoren berechnen, selbst wenn Sie es nicht erkennen) von der Konfusionsmatrix erhalten. Ich bin mir nicht sicher, aber Sie können die Präzisions-Recall-Kurve für jeden Unterklassifizierer zeichnen.

Überprüfen Sie auch diese Folien: Ссылка

Ich weiß nicht, was die ROC-Kurve ist, ich werde es überprüfen, weil maschinelles Lernen für mich ein sehr interessantes Thema ist.

Hoffe, das hilft,

    
jespestana 19.10.2012 18:46
quelle