Menu
CoddyTech

Krzywe ROC

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 25 z 58.

Każdy próg ma własną czułość i własną liczbę fałszywych alarmów. Krzywa ROC pokazuje je wszystkie jednocześnie:

Niebieska schodkowa krzywa wznosząca się od lewego dolnego rogu do prawego górnego, znacznie powyżej przerywanej szarej przekątnej odpowiadającej rzutowi monetą. Pomarańczowe kropki oznaczają progi 0.8, 0.5 i 0.2, przesuwając się w górę i w prawo. Obszar pod nią jest zacieniowany: AUC = 0.914

W poziomie: odsetek wyników fałszywie dodatnich, czyli odsetek zdrowych pacjentów, których uznano za chorych. W górę: czułość. Niższe progi przesuwają się w kierunku (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 to czułość
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")

To wyświetla 0.914, czyli AUC: pole pod krzywą. 1 oznacza wynik idealny, a 0.5 — rzut monetą. Wyższa krzywa pozwala wykryć więcej przypadków przy tej samej liczbie fałszywych alarmów.

challenge icon

Wyzwanie

Średni

Na farmie wiśniowej w noce, podczas których może wystąpić mróz, rozpalane są ogniska przeciwmrozowe. Kod początkowy trenuje dwa modele przewidujące mróz, logistic i knn, oraz przygotowuje wykres.

  1. Napisz draw_roc(model, name): rysuje krzywą ROC modelu na ax, z etykietą name, i wypisuje AUC, jak poniżej.
  2. Wywołaj ją dla obu modeli, dodaj przerywaną przekątną z etykietą coin toss i legendę, a następnie wyświetl wykres.

Dla modeli osuwisk:

logistic AUC: 0.869
k-NN AUC: 0.924

Następnie Coddy opisze Twój wykres. Ich wykres wygląda tak:

Krzywe ROC zatytułowane Ostrzeżenia przed osuwiskami: schodkowa niebieska krzywa logistic i pomarańczowa krzywa k-NN z niewielką liczbą narożników, obie znacznie powyżej przerywanej zielonej przekątnej rzutu monetą, z legendą

Spróbuj swoich sił

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

# Jeden wiersz na każdą wiosenną noc w sadzie wiśniowym: 1 w frost oznacza, że przed świtem wystąpił przymrozek
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)

# Dwa modele przewidujące przymrozek
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")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online