ÎncepețiÎncepe gratuit

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • Folosește metoda .predict() pentru a obține probabilitățile fiecărei clase și stochează-le în variabila pred_probabilities.
  • Acceptă probabilitatea maximă doar dacă este mai mare sau egală cu 0.5 și stochează rezultatele în variabila y_pred_50.
  • Folosește funcțiile np.argmax() și np.max() pentru a face același lucru cu un prag egal cu 0.8.
  • Afișează variabila trade_off cu 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'])

____
Editează și rulează codul