Precisione e richiamo
Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 22 di 58.
Due domande valutano le risposte del test sull'influenza. Tra i suoi allarmi di influenza, quanti erano corretti? Tra i casi reali di influenza, quanti ne ha individuati?
La precisione risponde alla prima domanda: 42 allarmi su 45. Il richiamo risponde alla seconda: 42 casi su 47.
from sklearn.metrics import precision_score, recall_score
print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}"):.3f mostra sempre 3 cifre decimali, quindi 0.9 verrebbe stampato come 0.900. Questo stampa:
0.933
0.894Scegli in base all’errore più costoso. Un caso di influenza non rilevato si diffonde, quindi questo test richiede un’elevata sensibilità. Un filtro antispam che nasconde le email autentiche richiede precisione.
Sfida
MedioIl filtro di un negozio nasconde le recensioni che sembrano false. Il codice iniziale crea due versioni usando lo stesso modello, strict_pred e eager_pred, e legge quale errore è più grave: missed (una recensione falsa rimane visibile) oppure hidden (una recensione vera scompare).
- Stampa la precisione e il richiamo di ciascun filtro, con 3 decimali.
- Stampa il filtro che commette meno errori di quel tipo, come sotto (per
missed:Fewer fakes missed: ...).
Per un altro negozio e hidden:
Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strictProvalo tu
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score
# Quale errore è più dannoso: missed (una recensione falsa rimane visibile) o hidden (una recensione autentica viene nascosta)?
worse = input()
# Una riga per recensione: 1 in fake significa che la recensione è stata scritta su commissione
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]
# Due filtri dello stesso modello: strict nasconde una recensione quando la probabilità che sia falsa è 0.7, eager quando è 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3
# 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