Menu
CoddyTech

ROC-Kurven

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

Jeder Schwellenwert ergibt einen eigenen Recall-Wert und eine eigene Anzahl an Fehlalarmen. Die ROC-Kurve zeigt alle auf einmal:

Eine blaue Treppenkurve, die von der unteren linken Ecke zur oberen rechten Ecke ansteigt und weit über einer gestrichelten grauen Zufallsdiagonale liegt. Orangefarbene Punkte markieren die Schwellenwerte 0.8, 0.5 und 0.2 und bewegen sich nach oben und rechts. Die Fläche darunter ist schattiert: AUC = 0.914

Waagerecht: die Falsch-Positiv-Rate, der Anteil der gesunden Patienten, die als positiv eingestuft werden. Senkrecht: Recall. Niedrigere Schwellenwerte bewegen sich in Richtung (1, 1).

from sklearn.metrics import roc_curve, roc_auc_score

proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, proba)  # tpr ist Recall
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

Dies gibt 0.914 aus, die AUC: die Fläche unter der Kurve. 1 ist perfekt, 0.5 entspricht einem Münzwurf. Eine höhere Kurve erfasst mehr bei gleich vielen Fehlalarmen.

challenge icon

Aufgabe

Mittel

Ein Kirschhof entzündet in Nächten, in denen es frieren könnte, Frostfeuer. Das Starterprogramm trainiert zwei Frostmodelle, logistic und knn, und richtet das Diagramm ein.

  1. Schreibe draw_roc(model, name): Die Funktion zeichnet die ROC-Kurve des Modells auf ax, beschriftet sie mit name und gibt dessen AUC wie unten aus.
  2. Rufe die Funktion für beide Modelle auf, füge eine gestrichelte Diagonale mit der Beschriftung coin toss und eine Legende hinzu und zeige dann das Diagramm an.

Für Erdrutschmodelle:

logistic AUC: 0.869
k-NN AUC: 0.924

Dann beschreibt Coddy dein Diagramm. Das von Coddy sieht so aus:

ROC-Kurven mit dem Titel Erdrutschwarnungen: eine stufenförmige blaue logistic-Kurve und eine orange k-NN-Kurve mit wenigen Ecken, beide deutlich über einer gestrichelten grünen Diagonale für einen Münzwurf, mit einer Legende

Probier es selbst

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score

# Eine Zeile pro Frühlingsnacht auf einer Kirschfarm: 1 in frost bedeutet, dass sich vor Sonnenaufgang Frost gebildet hat
nights = pd.read_csv("frost.csv")
features = ["temp_6pm_c", "humidity_pct", "wind_kmh", "cloud_pct"]
X_train, X_test, y_train, y_test = train_test_split(
    nights[features], nights["frost"], test_size=0.25, random_state=0, stratify=nights["frost"])
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# Zwei Frostmodelle
logistic = LogisticRegression(max_iter=1000)
logistic.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

fig, ax = plt.subplots()
ax.set_title("Frost Warnings")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")

# 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