Il punteggio F1
Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 23 di 58.
Un modello può massimizzare la precisione o il richiamo sacrificando l'altro. L'F1 score combina i due e rimane basso a meno che entrambi non siano alti:
Con P per la precisione e R per il richiamo, F1 è 2 * P * R / (P + R). Per un modello meteorologico:
from sklearn.metrics import f1_score, classification_report
y_test = ["sun", "sun", "rain", "rain", "snow", "sun", "rain", "snow"]
pred = ["sun", "rain", "rain", "rain", "snow", "sun", "sun", "rain"]
print(f1_score(y_test, pred, average=None)) # uno per classe, in ordine
print(classification_report(y_test, pred))Questo stampa:
[0.57142857 0.66666667 0.66666667]
precision recall f1-score support
rain 0.50 0.67 0.57 3
snow 1.00 0.50 0.67 2
sun 0.67 0.67 0.67 3
accuracy 0.62 8
macro avg 0.72 0.61 0.63 8
weighted avg 0.69 0.62 0.63 8Il report assegna un punteggio a ogni classe; support conta le sue righe di test. La riga più debole ti indica cosa correggere per prima.
Sfida
MedioLa telecamera di un impianto di riciclaggio smista gli oggetti nei contenitori per vetro, metallo, carta e plastica. Il programma legge k e il codice iniziale addestra il modello k-NN della telecamera, popola pred ed elenca i bins.
- Stampa il rapporto di classificazione.
- Trova il contenitore con il valore F1 più basso e stampalo, poi stampa il suo aspetto più debole, precisione o richiamo, come sotto (3 decimali).
Dopo il rapporto, per un altro impianto:
Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571Provalo tu
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, f1_score, precision_score, recall_score
k = int(input())
# Una riga per ogni oggetto sul nastro trasportatore e per il contenitore a cui appartiene
items = pd.read_csv("recycling.csv")
features = ["weight_g", "shine", "see_through", "bend"]
X_train, X_test, y_train, y_test = train_test_split(items[features], items["material"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Il modello della telecamera
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# I contenitori, nell'ordine in cui compaiono i punteggi per ciascuna classe
bins = model.classes_
# 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