CommencerCommencer gratuitement

Compromis entre précision et rappel

Lorsqu'on travaille sur des tâches de classification, le terme « compromis précision-rappel » apparaît souvent. D'où provient-il ?

En règle générale, la classe présentant la probabilité la plus élevée est choisie pour attribuer le document. Cependant, que se passe-t-il si la probabilité maximale est égale à 0.1? Considérez-vous que ce document appartient à cette catégorie avec seulement 10 % de probabilité ?

La réponse varie en fonction du problème rencontré. Il est possible d'ajouter un seuil minimal pour accepter la classification. En modifiant ce seuil, les valeurs de précision et de rappel évoluent dans des directions opposées.

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 attribué à l'DEFAULT_CLASS (choisie comme classe 2).

Cet exercice fait partie du cours

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

Afficher le cours

Instructions

  • Utilisez la méthode « .predict() » pour obtenir les probabilités pour chaque classe et stockez-les dans la variable « pred_probabilities ».
  • Acceptez la probabilité maximale uniquement si elle est supérieure ou égale à 0.5 et enregistrez les résultats dans la variable y_pred_50.
  • Veuillez utiliser les fonctions « np.argmax() » et « np.max() » pour effectuer la même opération avec un seuil égal à « 0.8 ».
  • Veuillez imprimer la variable d'trade_off avec toutes les métriques.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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