Ich habe eine Verwechslungsmatrix für meinen Klassifikator mit der Methode confusion_matrix () aus dem sklearn-Paket berechnet. Die diagonalen Elemente der Konfusionsmatrix stellen die Anzahl der Punkte dar, für die das vorhergesagte Label dem wahren Label entspricht, während die Elemente außerhalb des Diagonals diejenigen sind, die vom Klassifikator falsch gekennzeichnet sind.
Ich möchte meine Konfusionsmatrix so normalisieren, dass sie nur Zahlen zwischen 0 und 1 enthält. Ich möchte den Prozentsatz korrekt klassifizierter Proben aus der Matrix lesen.
Ich habe mehrere Methoden gefunden, um eine Matrix zu normalisieren (Zeilen- und Spaltennormalisierung), aber ich weiß nicht viel über Mathematik und bin mir nicht sicher, ob dies der richtige Ansatz ist. Kann mir bitte jemand helfen?
Ich nehme an, dass M[i,j]
für Element of real class i was classified as j
steht. Wenn es anders herum ist, musst du alles, was ich sage, transponieren. Ich werde auch die folgende Matrix für konkrete Beispiele verwenden:
Es gibt im Wesentlichen zwei Dinge, die Sie tun können:
Als Erstes können Sie fragen, wie viel Prozent der Elemente der realen Klasse i
hier als Klasse klassifiziert werden. Um dies zu tun, nehmen wir eine Zeile, die i
festlegt und jedes Element durch die Summe der Elemente in der Zeile teilt. In unserem Beispiel werden Objekte der Klasse 2 4-mal als Klasse 1 klassifiziert, 5-mal korrekt als Klasse 2 klassifiziert und 6-mal als Klasse 3 klassifiziert. Um die Prozentsätze zu finden, teilen wir einfach alles durch die Summe 4 + 5 + 6 = 15
Das zweite, was Sie tun können, ist, jedes Ergebnis Ihres Klassifikators zu betrachten und zu fragen, wie viele dieser Ergebnisse von jeder echten Klasse stammen. Es wird dem anderen Fall ähnlich sein, aber mit Spalten statt Reihen. In unserem Beispiel gibt unser Klassifikator 1 zurück, wenn die ursprüngliche Klasse 1 ist, 4, wenn die ursprüngliche Klasse 2 ist, und 7, wenn die ursprüngliche Klasse 3 ist. Um die Prozentsätze zu finden, teilen wir sie durch die Summe 1 + 4 + 7 = 12
%Vor%-
Natürlich gelten beide Methoden, die ich angegeben habe, nur für einzelne Spalten gleichzeitig, und ich bin mir nicht sicher, ob es eine gute Idee wäre, Ihre Konfusionsmatrix in dieser Form zu modifizieren. Dies sollte jedoch die Prozentsätze ergeben, nach denen Sie suchen.
Angenommen,
%Vor%Um herauszufinden, wie viele Stichproben pro Klasse ihr richtiges Etikett erhalten haben, brauchen Sie
%Vor%Die Diagonale enthält die erforderlichen Werte. Eine andere Möglichkeit, diese zu berechnen, besteht darin, zu erkennen, dass das, was Sie berechnen, der Rückruf pro Klasse ist:
%Vor% Wenn Sie dividieren durch die Summe über axis=0
, erhalten Sie ebenfalls die Genauigkeit (Bruch der Klasse k
Vorhersagen, die die Ground Truth-Marke k
haben):
Die von sklearns confusion_matrix()
ausgegebene Matrix ist so dass
C_ {i, j} ist gleich der Anzahl von Beobachtungen, von denen bekannt ist, dass sie in Gruppe i sind aber vorhergesagt in Gruppe j zu sein
Um die Prozentsätze für jede Klasse (oft als Spezifität und Empfindlichkeit in binärer Klassifikation bezeichnet) zu erhalten, müssen Sie nach Zeile normalisieren: Ersetzen Sie jedes Element in einer Zeile durch die Summe der Elemente dieser Zeile.
Beachten Sie, dass sklearn eine Zusammenfassungsfunktion zur Verfügung hat, die Metriken aus der Konfusionsmatrix berechnet: classification_report . Es gibt Präzision und Erinnerungsvermögen statt Spezifität und Sensitivität, aber diese werden im Allgemeinen oft als informativer angesehen (insbesondere für eine unausgeglichene Mehrklassenklassifikation).
Aus der sklearn-Dokumentation (Diagrammbeispiel)
%Vor%wobei cm die Konfusionsmatrix ist, wie sie von sklearn bereitgestellt wird.
Tags und Links python scikit-learn normalization matrix