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
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 variabley_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'])
____