Curve ROC
Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 25 di 58.
Ogni soglia determina il proprio richiamo e i propri falsi allarmi. La curva ROC li mostra tutti in una volta:
In orizzontale: il tasso di falsi positivi, la quota di pazienti sani segnalati. In verticale: il richiamo. Le soglie più basse salgono verso (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 è la sensibilità
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")Questo stampa 0.914, l'AUC: l'area sotto la curva. 1 è perfetto, 0.5 è come lanciare una moneta. Una curva più alta rileva più casi a parità di falsi allarmi.
Sfida
MedioUn'azienda agricola di ciliegi accende fuochi antigelo nelle notti in cui potrebbe gelare. Il codice iniziale addestra due modelli per il gelo, logistic e knn, e prepara il grafico.
- Scrivi
draw_roc(model, name): traccia la curva ROC del modello suax, con l'etichettaname, e stampa il suo AUC come sotto. - Chiamala per entrambi i modelli, aggiungi una diagonale tratteggiata con l'etichetta
coin tosse una legenda, poi visualizza il grafico.
Per i modelli sulle frane:
logistic AUC: 0.869
k-NN AUC: 0.924Poi Coddy descrive il tuo grafico. Il suo è così:
Provalo tu
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
# Una riga per ogni notte primaverile in un ceraseto: 1 in frost significa che si è formata brina prima dell'alba
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)
# Due modelli per prevedere la brina
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")
# Scrivi il tuo codice qui sotto
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento supervisionato
1Il tuo primo modello
Imparare dagli esempiInsiemi di addestramento e testAdattare e prevedereValutare un modelloRiepilogo: Ordinatore di semi4Regressione logistica
Previsioni sì o noLa soglia decisionaleI pesi come evidenzePiù classiRiepilogo: filtro antispam2Vicini più prossimi
Come decide k-NNScegliere kConfini decisionaliNormalizzare le scale per i viciniRiepilogo: vicini del vino5Misurare i classificatori
La matrice di confusionePrecisione e richiamoIl punteggio F1Classi sbilanciateCurve ROCRiepilogo: test di screening8Convalida incrociata
Validazione K-foldConfronto equo tra modelliRicerca a grigliaRiepilogo: riparazioni di skateboard11Progetto: specie di pinguini
Incontra i pinguiniPrepara i datiScegli un modelloOttimizza il miglioreDistribuisci il modello3Regressione lineare
Prevedere numeriPiù caratteristicheMisurare gli erroriGrafici dei residuiRiepilogo: noleggio di biciclette6Alberi decisionali
Gli alberi fanno domandeLeggere un alberoProfondità dell’alberoImportanza delle caratteristicheRiepilogo: decisioni sui prestitiEsercitati da solo: Compilatore Python online