Compromisul Precizie-Recuperare
În sarcinile de clasificare, apare adesea termenul compromis Precizie-Recuperare (Precision-Recall trade-off). De unde provine?
De obicei, clasa cu probabilitatea cea mai mare este aleasă pentru a atribui documentul. Dar ce se întâmplă dacă probabilitatea maximă este egală cu 0.1? Ar trebui să consideri că documentul aparține acelei clase cu doar 10% probabilitate?
Răspunsul variază în funcție de problema în cauză. Este posibil să adaugi un prag minim pentru a accepta clasificarea, iar prin modificarea acestui prag, valorile preciziei și ale recuperării se mișcă în direcții opuse.
Variabilele y_true și modelul model sunt încărcate. De asemenea, dacă probabilitatea este mai mică decât pragul, documentul va fi atribuit clasei DEFAULT_CLASS (aleasă ca fiind clasa 2).
Acest exercițiu face parte din cursul
Rețele Neuronale Recurente (RNN) pentru Modelare a Limbajului cu Keras
Instrucțiuni pentru exercițiu
- Folosește metoda
.predict()pentru a obține probabilitățile fiecărei clase și stochează-le în variabilapred_probabilities. - Acceptă probabilitatea maximă doar dacă este mai mare sau egală cu
0.5și stochează rezultatele în variabilay_pred_50. - Folosește funcțiile
np.argmax()șinp.max()pentru a face același lucru cu un prag egal cu0.8. - Afișează variabila
trade_offcu toate metricile.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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'])
____