Wie berechnet man die Genauigkeit / den Rückruf für die Klassifizierung mit mehreren Klassen und mehreren Etiketten?


72

Ich frage mich, wie man Genauigkeits- und Rückrufmaße für die Multiklassen-Multilabel-Klassifizierung berechnet, dh eine Klassifizierung, bei der es mehr als zwei Labels gibt und bei der jede Instanz mehrere Labels haben kann.


1
Der Multilabel-Teil macht es viel schwieriger und das interessiert mich auch. Ich denke, dass es nicht auf Multilabel-Probleme anwendbar ist, aber vertraue mir überhaupt nicht.
user798719

1
Tatsächlich handelt es sich bei allen Multilabel-Problemen um Multiclass-Probleme, sodass Sie das utiml-Paket beispielsweise in R oder Mulan in Java verwenden können.
Adriano Rivolli

Antworten:


19

Ein weiteres beliebtes Tool zur Messung der Klassifikatorleistung ist ROC / AUC . Auch diese hat eine Multi-Class / Multi-Label-Erweiterung: siehe [Hand 2001]

[Hand 2001]: Eine einfache Verallgemeinerung des Bereichs unter der ROC-Kurve auf mehrere Klassifizierungsprobleme


Es ist beliebt, aber es kann fehlerhaft sein. Ich vertraue dem nicht ganz. stats.stackexchange.com/questions/93901/…
EngrStudent

3
Niemals den Stapelüberlauf ändern! Guy stellt ein Problem, die am häufigsten gewählte Antwort beantwortet seine Frage nicht wirklich, weist jedoch auf ein anderes Tool / eine andere Bibliothek hin, die besser wäre
ragvri

Ja, wie kann diese Antwort +20 haben? Es enthält nicht einmal die Worte Präzision und Erinnerung.
Simon Dirmeier

Wenn Sie gründlich nachdenken, werden Sie feststellen, dass Präzision und Erinnerung tatsächlich von AUC erfasst werden.
oDDsKooL

16

Im Folgenden wird der Thread des coursera-Forums zur Verwirrungsmatrix und zur Präzisions- / Rückrufmessung in mehreren Klassen erörtert.

Die Grundidee besteht darin, die gesamte Genauigkeit und den Abruf aller Klassen zu berechnen und sie dann zu mitteln, um eine einzige reelle Zahlenmessung zu erhalten.

Die Verwirrungsmatrix erleichtert die Berechnung der Genauigkeit und den Abruf einer Klasse.

Im Folgenden finden Sie einige grundlegende Erklärungen zur Verwirrungsmatrix, die aus diesem Thread kopiert wurden:

Eine Verwirrungsmatrix ist eine Methode zum Klassifizieren von echten Positiven, echten Negativen, falschen Positiven und falschen Negativen, wenn es mehr als zwei Klassen gibt. Es wird zur Berechnung der Präzision und des Rückrufs und damit der f1-Punktzahl für Probleme mit mehreren Klassen verwendet.

Die tatsächlichen Werte werden durch Spalten dargestellt. Die vorhergesagten Werte werden durch Zeilen dargestellt.

Beispiele:

10 Trainingsbeispiele, die tatsächlich 8 sind, werden fälschlicherweise als 5 klassifiziert (vorhergesagt).
13 Trainingsbeispiele, die tatsächlich 4 sind, werden fälschlicherweise als 9 klassifiziert

Verwirrung Matrix

cm =
     0 1 2 3 4 5 6 7 8 9 10
     1 298 2 1 0 1 1 3 1 1 0
     2 0 293 7 4 1 0 5 2 0 0
     3 1 3 263 0 8 0 0 3 0 2
     4 1 5 0 261 4 0 3 2 0 1
     5 0 0 10 0 254 3 0 10 2 1
     6 0 4 1 1 4 300 0 1 0 0
     7 1 3 2 0 0 0 264 0 7 1
     8 3 5 3 1 7 1 0 289 1 0
     9 0 1 3 13 1 0 11 1 289 0
    10 0 6 0 1 6 1 2 1 4 304

Für Klasse X:

  • Richtig positiv: Diagonale Position, cm (x, x).

  • Falsch positiv: Summe von Spalte x (ohne Hauptdiagonale), Summe (cm (:, x)) - cm (x, x).

  • Falsch negativ: Summe von Zeile x (ohne Hauptdiagonale), Summe (cm (x, :), 2) - cm (x, x).

Sie können die Genauigkeit, den Abruf und die F1-Punktzahl anhand der Kursformel berechnen.

Die Mittelung über alle Klassen (mit oder ohne Gewichtung) ergibt Werte für das gesamte Modell.


2
Sie haben Ihre Äxte gewendet. Basierend auf dem, was Sie geschrieben haben, sollte Ihr CM transponiert werden.
Spacey

@Tarantula Warum denkst du so? Ich denke er hat recht
Shahensha

@shahensha Probieren Sie es für eine Spalte aus, es ist falsch.
Spacey

1
Die Verbindung zum Coursera-Thread ist unterbrochen
shark8me

8
Ich glaube nicht, dass diese Antwort das Multilabel-Problem behandelt. Dies gilt für Probleme mit mehreren Klassen. Was ist der Begriff eines falsch-positiven oder falsch-negativen in Multilabel-Problemen?
user798719

13

Bei der Klassifizierung mit mehreren Etiketten haben Sie zwei Möglichkeiten. Beachten Sie zunächst Folgendes.

  • n
  • Yiith
  • xiith
  • h(xi)ith

Beispiel basiert

Die Metriken werden pro Datenpunkt berechnet. Für jedes vorhergesagte Etikett wird nur seine Punktzahl berechnet, und diese Punktzahlen werden dann über alle Datenpunkte aggregiert.

  • 1ni=1n|Yih(xi)||h(xi)|
  • 1ni=1n|Yih(xi)||Yi|

Es gibt auch andere Metriken.

Label basiert

Hier werden die Dinge etikettenweise erledigt. Für jedes Etikett werden die Metriken (z. B. Genauigkeit, Rückruf) berechnet und dann diese kennsatzweisen Metriken aggregiert. In diesem Fall berechnen Sie also die Genauigkeit / den Rückruf für jedes Etikett über den gesamten Datensatz, wie Sie es für eine binäre Klassifizierung tun (da jedes Etikett eine binäre Zuordnung hat), und aggregieren sie dann.

Der einfache Weg ist, die allgemeine Form zu präsentieren.

Dies ist nur eine Erweiterung des Standardäquivalents für mehrere Klassen.

  • 1qj=1qB(TPj,FPj,TNj,FNj)

  • B(j=1qTPj,j=1qFPj,j=1qTNj,j=1qFNj)

TPj,FPj,TNj,FNjjth

B

Vielleicht möchten Sie hier einen Blick in den Code für die Multilabel-Metriken werfen , der Teil des Pakets mldr in R ist . Vielleicht interessieren Sie sich auch für die Java Multi-Label-Bibliothek MULAN .

Dies ist ein nützliches Dokument, um die verschiedenen Metriken kennenzulernen: Ein Überblick über Multi-Label-Lernalgorithmen


Es wäre gut gewesen, wenn Sie Referenzen bezüglich der Authentizität der Metriken angegeben hätten, die Sie wie eine Wikipedia-Referenz geschrieben haben. Die Referenzen, die Sie erwähnt haben, sind der Codierungsteil der Metriken oder des Forschungspapiers.
hacker315

2
Ein Übersichtsartikel ist bereits am Ende der Antwort verlinkt (Ein Überblick über Multi-Label- Lernalgorithmen ). Ieeexplore.ieee.org/document/6471714 . Dies sind bekannte Metriken in der Literatur, auf deren Grundlage die Implementierungen durchgeführt werden. Ich bin mir nicht sicher, wie ich Authentizität nachweisen kann.
Phoxis

8

Ich weiß nichts über den Multilabel-Teil, aber für die Klassifizierung mehrerer Klassen helfen Ihnen diese Links

In diesem Link wird erläutert, wie Sie die Verwirrungsmatrix erstellen, mit der Sie die Genauigkeit und den Rückruf für jede Kategorie berechnen können

In diesem Link wird erläutert, wie Sie die Maße micro-f1 und macro-f1 berechnen, um den Klassifikator als Ganzes zu bewerten.

Ich hoffe, dass Sie das nützlich fanden.


4
Der entscheidende Punkt ist: Es gibt mehrere mögliche gültige Methoden, um diese Metriken zu berechnen (z. B. Mikro-F1 vs. Makro-F1), da es mehrere Methoden gibt, um zu definieren, was richtig ist. Dies hängt von Ihrer Bewerbung und den Gültigkeitskriterien ab.
Jack Tanner

Ahmed: Danke für die Links! @JackTanner Hätten Sie vielleicht eine Referenz dafür (für den Fall der Mehrfachklassifizierung)?
Vam

1
@ MaVe, sorry, keine Links. Dies ist nur aus persönlicher Erfahrung. Sie gelangen dorthin, indem Sie einfach darüber nachdenken, was für Ihre Zwecke beispielsweise ein wahres Positiv und ein falsches Positiv darstellt.
Jack Tanner

4
Der erste Link ist gestorben
Nikana Reklawyks 03.08.13

1

Dieser Link hat mir geholfen. https://www.youtube.com/watch?v=HBi-P5j0Kec Ich hoffe, es wird Ihnen auch helfen

Sagen Sie die Verteilung wie folgt

    A   B   C   D
A   100 80  10  10
B   0    9   0   1
C   0    1   8   1
D   0    1   0   9

die Präzision für A wäre

P (A) = 100/100 + 0 + 0 + 0 = 100

P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... nehme im wesentlichen das wahre Positiv der Klasse und teile es durch die Spaltendaten über die Zeilen auf

Rückruf für eine wäre

R (A) = 100 / 100+ 80 + 10 + 10 = 0,5

R (B) = 9 / 9+ 0 + 0 + 1 = 0,9

psst ... nehme im Wesentlichen das wahre Positiv der Klasse und teile es durch die Zeilendaten über Spalten auf

Sobald Sie alle Werte erhalten haben, nehmen Sie den Makro-Durchschnitt

Durchschnitt (P) = P (A) + P (B) + P (C) + P (D) / 4

Durchschnitt (R) = R (A) + R (B) + R (C) + R (D) / 4

F1 = 2 * Durchschnitt (P) * Durchschnitt (R) / Durchschnitt (P) + Durchschnitt (R)


0

Schauen Sie sich diese Folien von cs205.org in Harvard an . Sobald Sie den Abschnitt über Fehlermaßnahmen erreicht haben, werden Genauigkeit und Rückruf in Einstellungen für mehrere Klassen (z. B. Eins-gegen-Alles oder Eins-gegen-Eins) und Verwirrungsmatrizen erörtert. Verwirrungsmatrizen sind das, was Sie hier wirklich wollen.

Zu Ihrer Information , im Python-Softwarepaket scikits.learn gibt es integrierte Methoden, um automatisch Dinge wie die Verwirrungsmatrix aus Klassifikatoren zu berechnen, die auf Daten mehrerer Klassen trainiert wurden. Es kann wahrscheinlich auch direkt Präzisions-Rückruf-Diagramme für Sie berechnen. Einen Blick wert.


4
Leider ist der Link zu den Folien nicht mehr vorhanden und ich konnte die Folien an anderer Stelle finden.
f3lix

Es wird wieder aufgefüllt, wenn sie zu dieser Vorlesung im diesjährigen Kurs kommen. Wenn ich die PDF-Datei an einen dauerhaften Link-Speicherort kopieren könnte, würde ich dies tun, kann dies aber nicht. Daher ist es unvermeidlich, dass sie regelmäßig unterbrochen wird und es keinen anderen Ort gibt, an dem die Notizen gefunden werden können. Sie sind für diesen Kurs spezifisch.
Ely

sklearn unterstützt Multi-Label für Verwirrungsmatrix nicht github.com/scikit-learn/scikit-learn/issues/3452
Franck Dernoncourt


0

Genau so, wie Sie es im Allgemeinen mit Mengen machen würden:

http://en.wikipedia.org/wiki/F1_score

http://en.wikipedia.org/wiki/Precision_and_recall

Hier sind einfache Python-Funktionen, die genau das tun:

def precision(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    len1 = len(y_pred)
    if len1 == 0:
        return 0
    else:
        return len(i) / len1


def recall(y_true, y_pred):
    i = set(y_true).intersection(y_pred)
    return len(i) / len(y_true)


def f1(y_true, y_pred):
    p = precision(y_true, y_pred)
    r = recall(y_true, y_pred)
    if p + r == 0:
        return 0
    else:
        return 2 * (p * r) / (p + r)


if __name__ == '__main__':
    print(f1(['A', 'B', 'C'], ['A', 'B']))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.