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:
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.
Aufgabe
MittelEin 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.
- Schreibe
draw_roc(model, name): Die Funktion zeichnet die ROC-Kurve des Modells aufax, beschriftet sie mitnameund gibt dessen AUC wie unten aus. - Rufe die Funktion für beide Modelle auf, füge eine gestrichelte Diagonale mit der Beschriftung
coin tossund eine Legende hinzu und zeige dann das Diagramm an.
Für Erdrutschmodelle:
logistic AUC: 0.869
k-NN AUC: 0.924Dann beschreibt Coddy dein Diagramm. Das von Coddy sieht so aus:
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
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