CNTK - Modèle de classification

Ce chapitre vous aidera à comprendre comment mesurer les performances du modèle de classification dans CNTK. Commençons par la matrice de confusion.

Matrice de confusion

Matrice de confusion - un tableau avec la sortie prévue par rapport à la sortie attendue est le moyen le plus simple de mesurer les performances d'un problème de classification, où la sortie peut être de deux types de classes ou plus.

Afin de comprendre son fonctionnement, nous allons créer une matrice de confusion pour un modèle de classification binaire qui prédit si une transaction par carte de crédit était normale ou une fraude. Il est montré comme suit -

Fraude réelle Normal réel

Predicted fraud

Vrai positif

Faux positif

Predicted normal

Faux négatif

Vrai négatif

Comme nous pouvons le voir, l'exemple de matrice de confusion ci-dessus contient 2 colonnes, une pour la fraude de classe et l'autre pour la classe normale. De la même manière, nous avons 2 lignes, une est ajoutée pour la fraude de classe et une autre est ajoutée pour la classe normale. Voici l'explication des termes associés à la matrice de confusion -

  • True Positives - Lorsque la classe réelle et la classe prévue du point de données sont à la fois 1.

  • True Negatives - Lorsque la classe réelle et la classe prédite du point de données sont égales à 0.

  • False Positives - Lorsque la classe réelle du point de données est 0 et la classe prévue du point de données est 1.

  • False Negatives - Lorsque la classe réelle du point de données est 1 et la classe prévue du point de données est 0.

Voyons comment nous pouvons calculer le nombre de choses différentes à partir de la matrice de confusion -

  • Accuracy- C'est le nombre de prédictions correctes faites par notre modèle de classification ML. Il peut être calculé à l'aide de la formule suivante -

  • Precision−Il nous indique combien d'échantillons ont été correctement prédits parmi tous les échantillons que nous avons prédits. Il peut être calculé à l'aide de la formule suivante -

  • Recall or Sensitivity- Rappel est le nombre de positifs renvoyés par notre modèle de classification ML. En d'autres termes, il nous indique combien de cas de fraude dans l'ensemble de données ont été réellement détectés par le modèle. Il peut être calculé à l'aide de la formule suivante -

  • Specificity- En face de rappel, il donne le nombre de négatifs retournés par notre modèle de classification ML. Il peut être calculé à l'aide de la formule suivante -

Mesure F

Nous pouvons utiliser la mesure F comme alternative à la matrice de confusion. La raison principale derrière cela, nous ne pouvons pas maximiser le rappel et la précision en même temps. Il existe une relation très forte entre ces métriques et qui peut être comprise à l'aide de l'exemple suivant -

Supposons que nous souhaitons utiliser un modèle DL pour classer les échantillons cellulaires comme cancéreux ou normaux. Ici, pour atteindre une précision maximale, nous devons réduire le nombre de prédictions à 1. Bien que cela puisse nous donner une précision d'environ 100%, mais le rappel deviendra vraiment faible.

D'un autre côté, si nous voulons atteindre le maximum de rappel, nous devons faire autant de prédictions que possible. Bien que cela puisse nous permettre d'atteindre environ 100% de rappel, la précision deviendra vraiment faible.

En pratique, nous devons trouver un moyen d'équilibrer la précision et le rappel. La métrique de mesure F nous permet de le faire, car elle exprime une moyenne harmonique entre précision et rappel.

Cette formule est appelée la mesure F1, où le terme supplémentaire appelé B est défini sur 1 pour obtenir un rapport égal de précision et de rappel. Afin de souligner le rappel, nous pouvons fixer le facteur B à 2. Par contre, pour accentuer la précision, nous pouvons fixer le facteur B à 0,5.

Utilisation de CNTK pour mesurer les performances de classification

Dans la section précédente, nous avons créé un modèle de classification en utilisant le jeu de données Iris flower. Ici, nous mesurerons ses performances en utilisant une matrice de confusion et une métrique de mesure F.

Créer une matrice de confusion

Nous avons déjà créé le modèle afin de pouvoir démarrer le processus de validation, qui comprend confusion matrix, sur le même. Tout d'abord, nous allons créer une matrice de confusion à l'aide duconfusion_matrix fonction de scikit-learn. Pour cela, nous avons besoin des vraies étiquettes pour nos échantillons de test et des étiquettes prédites pour les mêmes échantillons de test.

Calculons la matrice de confusion en utilisant le code Python suivant -

from sklearn.metrics import confusion_matrix
y_true = np.argmax(y_test, axis=1)
y_pred = np.argmax(z(X_test), axis=1)
matrix = confusion_matrix(y_true=y_true, y_pred=y_pred)
print(matrix)

Production

[[10 0 0]
[ 0 1 9]
[ 0 0 10]]

Nous pouvons également utiliser la fonction de carte thermique pour visualiser une matrice de confusion comme suit -

import seaborn as sns
import matplotlib.pyplot as plt
g = sns.heatmap(matrix,
     annot=True,
     xticklabels=label_encoder.classes_.tolist(),
     yticklabels=label_encoder.classes_.tolist(),
     cmap='Blues')
g.set_yticklabels(g.get_yticklabels(), rotation=0)
plt.show()

Nous devrions également avoir un seul numéro de performance, que nous pouvons utiliser pour comparer le modèle. Pour cela, nous devons calculer l'erreur de classification en utilisantclassification_error fonction, à partir du package de métriques dans CNTK comme effectué lors de la création du modèle de classification.

Maintenant, pour calculer l'erreur de classification, exécutez la méthode de test sur la fonction de perte avec un ensemble de données. Après cela, CNTK prélèvera les échantillons que nous avons fournis en entrée pour cette fonction et effectuera une prédiction basée sur les caractéristiques d'entrée X_test.

loss.test([X_test, y_test])

Production

{'metric': 0.36666666666, 'samples': 30}

Mettre en œuvre des mesures F

Pour mettre en œuvre des mesures F, CNTK comprend également une fonction appelée fmeasures. Nous pouvons utiliser cette fonction, tout en entraînant le NN en remplaçant la cellulecntk.metrics.classification_error, avec un appel à cntk.losses.fmeasure lors de la définition de la fonction d'usine de critère comme suit -

import cntk
@cntk.Function
def criterion_factory(output, target):
   loss = cntk.losses.cross_entropy_with_softmax(output, target)
metric = cntk.losses.fmeasure(output, target)
   return loss, metric

Après avoir utilisé la fonction cntk.losses.fmeasure, nous obtiendrons une sortie différente pour le loss.test appel de méthode donné comme suit -

loss.test([X_test, y_test])

Production

{'metric': 0.83101488749, 'samples': 30}