Créer une matrice de confusion

PythonBeginner
Pratiquer maintenant

Introduction

Dans ce projet, vous allez apprendre à implémenter une matrice de confusion, qui est un outil fondamental pour évaluer les performances d'un modèle de classification. La matrice de confusion fournit une ventilation détaillée des prédictions du modèle, vous permettant d'identifier les domaines d'amélioration et de gagner des insights précieux sur les forces et les faiblesses du modèle.

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment implémenter la fonction confusion_matrix pour calculer la matrice de confusion pour un problème de classification
  • Comment tester et affiner la fonction confusion_matrix pour gérer les cas limites et améliorer sa robustesse
  • Comment documenter la fonction confusion_matrix pour la rendre plus conviviale et plus facile à comprendre
  • Comment intégrer la fonction confusion_matrix dans un projet de machine learning plus vaste et l'utiliser pour évaluer les performances d'un modèle de classification

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Calculer et interpréter la matrice de confusion pour un problème de classification
  • Appliquer des techniques pour gérer les cas limites et améliorer la robustesse d'une fonction
  • Implémenter les meilleures pratiques pour documenter et rendre le code plus convivial
  • Appliquer la matrice de confusion dans le cadre d'un projet de machine learning plus vaste

Implémenter la fonction Matrice de confusion

Dans cette étape, vous allez implémenter la fonction confusion_matrix dans le fichier confusion_matrix.py. Cette fonction calculera la matrice de confusion pour un problème de classification.

La fonction confusion_matrix prend trois entrées :

  1. labels : Une liste d'étiquettes représentant les différentes classes.
  2. preds : Une liste de prédictions, où chaque prédiction est une liste de probabilités correspondant aux classes de la liste labels.
  3. ground_truth : Une liste d'étiquettes de vérité terrain.

La fonction doit renvoyer la matrice de confusion sous forme de liste de listes, où chaque liste interne représente une ligne de la matrice.

Voici le code de départ pour la fonction confusion_matrix :

def confusion_matrix(
    labels: List, preds: List[List[float]], ground_truth: List
) -> List[List[int]]:
    """
    Calcule la matrice de confusion pour un problème de classification.

    La fonction prend une liste d'étiquettes, une liste de prédictions (chaque prédiction étant une liste de probabilités
    pour chaque classe), et une liste d'étiquettes de vérité terrain, et renvoie une matrice de confusion.
    La matrice de confusion est une matrice carrée où l'entrée (i, j) est le nombre de fois où la classe i
    a été prédite lorsque la vraie classe était j.

    Paramètres :
    labels (List) : Une liste d'étiquettes représentant les différentes classes.
    preds (List[List[float]]) : Une liste de prédictions où chaque prédiction est une liste de
                               probabilités correspondant aux classes de la liste labels.
    ground_truth (List) : Une liste d'étiquettes de vérité terrain.

    Retourne :
    List[List[int]] : La matrice de confusion représentée sous forme de liste de listes où chaque liste
                     représente une ligne de la matrice.
    """
    ## Cela crée une matrice carrée avec des dimensions égales au nombre de classes, en initialisant tous les éléments à zéro. Chaque ligne et chaque colonne correspond à une étiquette de classe.
    matrix = [[0 for _ in range(len(labels))] for _ in range(len(labels))]

    ## Cette boucle associe chaque prédiction à son étiquette de vérité terrain correspondante et les traite une par une.
    for pred, truth in zip(preds, ground_truth):
        ## Utilise NumPy pour trouver l'index de la plus haute probabilité dans la liste de prédiction, qui correspond à la classe prédite.
        pred_index = np.argmax(pred)
        ## Trouve l'index de l'étiquette de vraie classe dans la liste `labels`.
        truth_index = labels.index(truth)
        ## Cette ligne incrémente la cellule à l'intersection de la ligne de classe prédite et de la colonne de vraie classe dans la matrice de confusion, comptant ainsi l'apparition de cette paire prédiction-vérité spécifique.
        matrix[pred_index][truth_index] += 1

    ## Après avoir traité toutes les prédictions, la fonction renvoie la matrice de confusion calculée.
    return matrix

Dans la fonction confusion_matrix, vous implémentez la logique pour calculer la matrice de confusion pour un problème de classification.

✨ Vérifier la solution et pratiquer

Tester la fonction Matrice de confusion

Dans cette étape, vous allez tester la fonction confusion_matrix à l'aide de l'exemple fourni.

Ajoutez le code suivant dans le fichier confusion_matrix.py :

if __name__ == "__main__":
    labels = ["Python", "Java", "C++"]
    preds = [
        [0.66528198, 0.21971853, 0.11499949],
        [0.34275858, 0.05847305, 0.59876836],
        [0.47650585, 0.26353373, 0.25996042],
        [0.76153846, 0.15384615, 0.08461538],
        [0.04691943, 0.9478673, 0.00521327],
    ]
    ground_truth = ["Python", "C++", "Java", "C++", "Java"]
    matrix = confusion_matrix(labels, preds, ground_truth)
    print(matrix)

Exécutez le fichier confusion_matrix.py pour exécuter l'exemple :

python confusion_matrix.py

La sortie devrait être :

[[1, 1, 1],
 [0, 1, 0],
 [0, 0, 1]]

Vérifiez que la sortie correspond à la matrice de confusion attendue.

Si la sortie n'est pas conforme à l'attente, réexaminez l'implémentation de la fonction confusion_matrix et apportez les corrections nécessaires.

✨ Vérifier la solution et pratiquer

Résumé

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.