Évaluer les performances du modèle

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

David Cecchini

Data Scientist

L'accuracy est peu informative

Tâche à 20 classes avec 80 % d'accuracy. Le modèle est-il bon ?

  • Peut-il bien classer toutes les classes ?
  • L'accuracy est-elle la même pour chaque classe ?
  • Le modèle surapprend-il sur la classe majoritaire ?

Aucune idée !

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

Matrice de confusion

Comparer vraies et prédites pour chaque classe

Présente la matrice de confusion, montrant les écarts entre étiquettes vraies et prédites

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

Précision

Précision

$$\text{Precision}_{\text{class}} = \frac{\text{Correct}_{\text{class}}}{\text{Predicted}_{\text{class}}}$$

Dans l'exemple :

$$ \text{Precision}_{\text{sci.space}} = \frac{76}{76+7+9} = 0.83 $$ $$ \text{Precision}_{\text{alt.atheism}} = \frac{1}{2+1+0} = 0.33 $$ $$ \text{Precision}_{\text{soc.religion.christian}} = \frac{3}{0+2+3} = 0.60 $$

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

Rappel

Rappel

$$\text{Recall}_{\text{class}} = \frac{\text{Correct}_{class}}{N_\text{class}}$$

Dans l'exemple :

$$ \text{Recall}_{\text{sci.space}} = \frac{76}{76+2+0} = 0.97 $$ $$ \text{Recall}_{\text{alt.atheism}} = \frac{1}{7+1+2} = 0.10 $$ $$ \text{Recall}_{\text{soc.religion.christian}} = \frac{3}{9+0+3} = 0.25 $$

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

F1-score

F1-score

$$\text{F1 score} = 2 * \frac{\text{precision}_{\text{class}} * \text{recall}_{\text{class}}}{\text{precision}_{\text{class}} + \text{recall}_{\text{class}}}$$

Dans l'exemple :

$$ f1score_{sci.space} = 2 \frac{0.83 * 0.97}{0.83 + 0.97} = 0.89 $$ $$ f1score_{alt.atheism} = 2 \frac{0.33 * 0.10}{0.33 + 0.10} = 0.15 $$ $$ f1score_{soc.religion.christian} = 2 \frac{0.60 * 0.25}{0.60 + 0.25} = 0.35 $$

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

Matrice de confusion Sklearn

from sklearn.metrics import confusion_matrix

# Construire la matrice de confusion confusion_matrix(y_true, y_pred)

Résultat :

array([[76,  2,  0],
       [ 7,  1,  2],
       [ 9,  0,  3]], dtype=int64)
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Métriques de performance

Métriques de sklearn

# Fonctions de sklearn
from sklearn.metrics import confusion_matrix
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Métriques de performance

# Accuracy
print(accuracy_score(y_true, y_pred))
$ 0.80

Ajoutez average=None aux fonctions de précision, rappel et F1-score

print(precision_score(y_true, y_pred, average=None))
print(recall_score(y_true, y_pred, average=None))
print(f1_score(y_true, y_pred, average=None))
$ array([0.83, 0.33, 0.60])
$ array([0.97, 0.10, 0.25])
$ array([0.89, 0.15, 0.35])
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Rapport de classification

Une fonction calcule tout :

lab_names = ['sci.space', 'alt.atheism', 'soc.religion.christian']
print(classification_report(y_true, y_pred, target_names=lab_names))
                        precision    recall  f1-score   support

             sci.space       0.83      0.97      0.89        78
           alt.atheism       0.33      0.10      0.15        10
soc.religion.christian       0.60      0.25      0.35        12

             micro avg       0.80      0.80      0.80       100
             macro avg       0.59      0.44      0.47       100
          weighted avg       0.75      0.80      0.76       100
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Passons à la pratique !

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

Preparing Video For Download...