CommencezCommencez gratuitement

Compromis précision-rappel

Dans les tâches de classification, on parle souvent du compromis précision-rappel. D'où vient-il?

Habituellement, on assigne le document à la classe ayant la probabilité la plus élevée. Mais si la probabilité maximale est égale à 0.1, que faire? Devez-vous considérer que ce document appartient à cette classe avec seulement 10 % de probabilité?

La réponse dépend du problème à résoudre. On peut ajouter un seuil minimal pour accepter la classification, et en faisant varier ce seuil, les valeurs de la précision et du rappel évoluent en sens inverse.

Les variables y_true et le modèle model sont chargés. De plus, si la probabilité est inférieure au seuil, le document sera assigné à DEFAULT_CLASS (définie comme la classe 2).

Cette activité fait partie du cours

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Voir le cours

Instructions de l’exercice

  • Utilisez la méthode .predict() pour obtenir les probabilités de chaque classe et enregistrez-les dans la variable pred_probabilities.
  • Acceptez la probabilité maximale seulement si elle est supérieure ou égale à 0.5 et stockez les résultats dans la variable y_pred_50.
  • Utilisez les fonctions np.argmax() et np.max() pour faire la même chose avec un seuil égal à 0.8.
  • Affichez la variable trade_off avec toutes les mesures.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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'])

____
Modifier et exécuter le code