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:
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.
Wyzwanie
ŚredniNa 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.
- Napisz
draw_roc(model, name): rysuje krzywą ROC modelu naax, z etykietąname, i wypisuje AUC, jak poniżej. - Wywołaj ją dla obu modeli, dodaj przerywaną przekątną z etykietą
coin tossi legendę, a następnie wyświetl wykres.
Dla modeli osuwisk:
logistic AUC: 0.869
k-NN AUC: 0.924Następnie Coddy opisze Twój wykres. Ich wykres wygląda tak:
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
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nadzorowane
1Twój pierwszy model
Uczenie się na przykładachZbiory treningowe i testoweDopasowywanie i przewidywanieOcena modeluPodsumowanie: Sortownik nasion4Regresja logistyczna
Przewidywanie „tak” lub „nie”Próg decyzyjnyWagi jako dowodyWiele klasPodsumowanie: filtr spamu2Najbliżsi sąsiedzi
Jak działa k-NNWybór kGranice decyzyjneSkalowanie dla sąsiadówPodsumowanie: sąsiedzi w zbiorze Wine5Ocena klasyfikatorów
Macierz pomyłekPrecyzja i czułośćWynik F1Niezrównoważone klasyKrzywe ROCPodsumowanie: test przesiewowy8Walidacja krzyżowa
Walidacja k-krotnaUczciwe porównywanie modeliPrzeszukiwanie siatkiPodsumowanie: naprawa deskorolki11Projekt: Gatunki pingwinów
Poznaj pingwinyPrzygotuj daneWybierz modelDopracuj zwycięski modelWdróż modelPoćwicz samodzielnie: Kompilator Python online