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
Istruzioni dell'esercizio
- Usa il metodo
.predict()per ottenere le probabilità di ciascuna classe e salvale nella variabilepred_probabilities. - Accetta la probabilità massima solo se è maggiore o uguale a
0.5e salva i risultati nella variabiley_pred_50. - Usa le funzioni
np.argmax()enp.max()per fare lo stesso con una soglia pari a0.8. - Stampa la variabile
trade_offcon 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'])
____