La matrice di confusione
Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 21 di 58.
La precisione conta gli errori, non il loro tipo. Per un test dell’influenza, mandare a casa un paziente malato è molto peggio di un falso allarme. Una matrice di confusione conta ciascun tipo:
L'influenza è la classe positiva, 1. Gli errori si trovano fuori dalla diagonale: falsi positivi (falsi allarmi) e falsi negativi (casi non rilevati).
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y_test, pred) # prima i valori reali
print(cm)
print(cm[1, 0]) # riga 1: ha l'influenza, colonna 0: classificato come sano
ConfusionMatrixDisplay.from_predictions(y_test, pred, display_labels=["healthy", "flu"],
ax=ax, colorbar=False) # nessuna barra dei colori: i conteggi parlano da soliStampa:
[[50 3]
[ 5 42]]
5Questo capitolo parla di ridurre quella cella dei casi mancati. Si conclude con un test di screening che non si lascia sfuggire quasi nessuno.
Sfida
MedioI bagnini ricevono un avviso mattutino quando potrebbe formarsi una corrente di risacca. Il codice iniziale addestra il modello di avviso e riempie pred per le mattine di test (1 significa corrente di risacca).
- Crea la matrice di confusione e stampa i quattro conteggi come mostrato di seguito.
- Disegnala su
ax, con le etichettecalmerip, e visualizzala.
Per un altro modello:
Rips caught: 30
Rips missed: 2
False alarms: 9
Calm days cleared: 59Coddy descrive il tuo grafico. Dovrebbe assomigliare a questo, relativo a un allarme per una perdita in una tubatura:
Provalo tu
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
# Una riga per ogni mattina in una spiaggia da surf: 1 in rip significa che quel giorno si è formata una corrente di risacca
beach = pd.read_csv("rips.csv")
features = ["wave_height_m", "wave_period_s", "wind_kmh", "tide_change_m"]
X = beach[features]
y = beach["rip"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# L'avviso dei bagnini per le correnti di risacca
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
pred = model.predict(X_test)
fig, ax = plt.subplots()
ax.set_title("Rip Current Alerts")
# 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