Inizia subitoInizia gratis

Compromesso Precision-Recall

Quando lavori con compiti di classificazione, compare spesso il termine Precision-Recall trade-off. Da dove nasce?

Di solito, si sceglie la classe con la probabilità più alta per assegnare il documento. Ma cosa succede se la probabilità massima è pari a 0.1? Dovresti considerare che quel documento appartenga a questa classe con solo il 10% di probabilità?

La risposta dipende dal problema in esame. È possibile aggiungere una soglia minima per accettare la classificazione e, modificando la soglia, i valori di precision e recall si muovono in direzioni opposte.

Le variabili y_true e il modello model sono già caricati. Inoltre, se la probabilità è inferiore alla soglia, il documento verrà assegnato a DEFAULT_CLASS (scelta come classe 2).

Questo esercizio fa parte del corso

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Visualizza corso

Istruzioni dell'esercizio

  • Usa il metodo .predict() per ottenere le probabilità di ciascuna classe e salvale nella variabile pred_probabilities.
  • Accetta la probabilità massima solo se è maggiore o uguale a 0.5 e salva i risultati nella variabile y_pred_50.
  • Usa le funzioni np.argmax() e np.max() per fare lo stesso con una soglia pari a 0.8.
  • Stampa la variabile trade_off con tutte le metriche.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

# Get probabilities for each class
pred_probabilities = model.____(X_test)

# Thresholds at 0.5 and 0.8
y_pred_50 = [np.argmax(x) if np.max(x) >= ____ else DEFAULT_CLASS for x in pred_probabilities]
y_pred_80 = [np.____(x) if np.____(x) >= 0.8 else DEFAULT_CLASS for x in pred_probabilities]

trade_off = pd.DataFrame({
    'Precision_50': precision_score(y_true, y_pred_50, average=None), 
    'Precision_80': precision_score(y_true, y_pred_80, average=None), 
    'Recall_50': recall_score(y_true, y_pred_50, average=None), 
    'Recall_80': recall_score(y_true, y_pred_80, average=None)}, 
  index=['Class 1', 'Class 2', 'Class 3'])

____
Modifica ed esegui il codice