IniziaInizia gratis

Ottimizzare la soglia

Hai sentito dire che il valore predefinito 0.5 massimizza teoricamente l’accuracy, ma vuoi verificare cosa succede in pratica. Provi quindi vari valori di soglia per vedere quale accuracy ottieni e determinare così la soglia con le prestazioni migliori. Ripeti l’esperimento per lo score F1. 0.5 è la soglia ottimale? La soglia ottimale per l’accuracy e per lo score F1 è la stessa? Vai e scoprilo! Hai a disposizione una matrice scores, ottenuta valutando i dati di test. Le etichette di ground truth per i dati di test sono disponibili come y_test. Infine, sono pre-caricate due funzioni di numpy, argmin() e argmax(), che recuperano rispettivamente l’indice del valore minimo e massimo in un array, oltre alle metriche accuracy_score() e f1_score().

Questo esercizio fa parte del corso

Progettare workflow di Machine Learning in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Crea un intervallo di valori di soglia che includa 0.0, 0.25, 0.5, 0.75 e 1.0.
  • Tramite una doppia list comprehension, memorizza le predizioni per ciascun valore di soglia nell’intervallo sopra. Ricorda che ottenere etichette da una matrice di punteggi usando una soglia thr è possibile con [s[1] > thr for s in scores].
  • Scorri quell’elenco e calcola l’accuracy per ogni soglia. Ripeti per lo score F1.
  • Usando argmin() o argmax(), trova la soglia ottimale per l’accuracy e per F1.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# Create a range of equally spaced threshold values
t_range = ____

# Store the predicted labels for each value of the threshold
preds = [[____ > thr for s in scores] for ____ in ____]

# Compute the accuracy for each threshold
accuracies = [____(____, ____) for p in preds]

# Compute the F1 score for each threshold
f1_scores = [____(____, ____) for p in preds]

# Report the optimal threshold for accuracy, and for F1
print(t_range[____(accuracies)], t_range[____(f1_scores)])
Modifica ed esegui il codice