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
Instructions de l’exercice
- Utilisez la méthode
.predict()pour obtenir les probabilités de chaque classe et enregistrez-les dans la variablepred_probabilities. - Acceptez la probabilité maximale seulement si elle est supérieure ou égale à
0.5et stockez les résultats dans la variabley_pred_50. - Utilisez les fonctions
np.argmax()etnp.max()pour faire la même chose avec un seuil égal à0.8. - Affichez la variable
trade_offavec 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'])
____