Menu
CoddyTech

Die Konfusionsmatrix

Teil des Abschnitts Überwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 21 von 58.

Die Genauigkeit zählt Fehler, nicht ihre Art. Bei einem Grippetest ist es viel schlimmer, einen kranken Patienten nach Hause zu schicken, als einen Fehlalarm auszulösen. Eine confusion_matrix zählt jede Art:

Ein 2-mal-2-Raster für einen Grippetest an 100 Patienten. Die Zeilen zeigen die Wahrheit: gesund, dann Grippe; die Spalten zeigen die Antwort: als gesund eingestuft, dann als Grippe eingestuft. Blaue richtige Antworten: 50 richtig Negative, 42 richtig Positive. Orange Fehler: 3 falsch Positive, 5 falsch Negative

Grippe ist die positive Klasse, 1. Die Fehler liegen außerhalb der Diagonale: falsch-positive Ergebnisse (Fehlalarme) und falsch-negative Ergebnisse (übersehene Fälle).

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

cm = confusion_matrix(y_test, pred)  # tatsächliche Werte zuerst
print(cm)
print(cm[1, 0])  # Zeile 1: hat Grippe, Spalte 0: als gesund eingestuft
ConfusionMatrixDisplay.from_predictions(y_test, pred, display_labels=["healthy", "flu"],
                                        ax=ax, colorbar=False)  # keine Farbleiste: Die Anzahlen sprechen für sich

Dies gibt aus:

[[50  3]
 [ 5 42]]
5

In diesem Kapitel geht es darum, die Zelle der übersehenen Fälle zu verkleinern. Es endet mit einem Screening-Test, bei dem fast niemand übersehen wird.

challenge icon

Aufgabe

Mittel

Rettungsschwimmer erhalten morgens eine Warnmeldung, wenn sich möglicherweise eine Strömung bildet. Das Startprogramm trainiert das Warnmodell und füllt pred für die Testmorgen aus (1 bedeutet Strömung).

  1. Erstelle die Konfusionsmatrix und gib die vier Werte wie unten aus.
  2. Zeichne sie auf ax, beschriftet mit calm und rip, und zeige sie an.

Für ein anderes Modell:

Rips caught: 30
Rips missed: 2
False alarms: 9
Calm days cleared: 59

Coddy beschreibt dein Diagramm. Es sollte wie dieses hier aussehen, das von einem Alarm für Rohrlecks stammt:

Eine Konfusionsmatrix mit dem Titel Leckwarnungen. Die Zeilen zeigen die tatsächlichen Klassen: trocken, dann Leck; die Spalten die vorhergesagten Klassen. Zellen: 61 und 4 in der Zeile „trocken“, 7 und 28 in der Zeile „Leck“

Probier es selbst

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

# Eine Zeile pro Morgen an einem Surfstrand: 1 in rip bedeutet, dass sich an diesem Tag eine Rückströmung gebildet hat
beach = pd.read_csv("rips.csv")
features = ["wave_height_m", "wave_period_s", "wind_kmh", "tide_change_m"]
X = beach[features]
y = beach["rip"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Die Warnung der Rettungsschwimmer vor Rückströmungen
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
pred = model.predict(X_test)

fig, ax = plt.subplots()
ax.set_title("Rip Current Alerts")

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Überwachtes Lernen

Übe selbstständig: Online-Python-Compiler