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:
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 sichDies gibt aus:
[[50 3]
[ 5 42]]
5In 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.
Aufgabe
MittelRettungsschwimmer 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).
- Erstelle die Konfusionsmatrix und gib die vier Werte wie unten aus.
- Zeichne sie auf
ax, beschriftet mitcalmundrip, und zeige sie an.
Für ein anderes Modell:
Rips caught: 30
Rips missed: 2
False alarms: 9
Calm days cleared: 59Coddy beschreibt dein Diagramm. Es sollte wie dieses hier aussehen, das von einem Alarm für Rohrlecks stammt:
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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Überwachtes Lernen
1Dein erstes Modell
Aus Beispielen lernenTrainings- und TestdatensätzeAnpassen und VorhersagenEin Modell bewertenRückblick: Saatgutsortierer4Logistische Regression
Ja-Nein-VorhersagenDie EntscheidungsschwelleGewichte als IndizienMehrere KlassenRückblick: Spamfilter2Nächste Nachbarn
So entscheidet k-NNk wählenEntscheidungsgrenzenSkalierung für NachbarnRückblick: Wein-Nachbarn5Klassifikatoren bewerten
Die KonfusionsmatrixPräzision und TrefferquoteDer F1-ScoreUnausgewogene KlassenROC-KurvenRückblick: Screeningtest3Lineare Regression
Zahlen vorhersagenMehrere MerkmaleFehler messenResiduenplotsZusammenfassung: Fahrradverleih6Entscheidungsbäume
Bäume stellen FragenEinen Baum lesenBaumtiefeMerkmalswichtigkeitRückblick: Kreditentscheidungen9Ensembleverfahren
Random ForestsWarum Random Forests funktionierenGradient BoostingRückblick: Förster des Waldes12Abschließende Herausforderungen
Diabetes-FortschrittKreditgenehmigungHandgeschriebene ZiffernKundenabwanderungÜbe selbstständig: Online-Python-Compiler