Comment faciliter la lecture des grandes matrices de confusion?

9

J'ai récemment publié un ensemble de données ( lien ) avec 369 classes. J'ai effectué quelques expériences sur eux pour avoir une idée de la difficulté de la tâche de classification. Habituellement, je l'aime s'il y a des matrices de confusion pour voir le type d'erreur en cours. Cependant, une matrice n'est pas pratique.369×369

Existe-t-il un moyen de donner les informations importantes des grandes matrices de confusion? Par exemple, il y a généralement beaucoup de 0 qui ne sont pas si intéressants. Est-il possible de trier les classes de façon à ce que la plupart des entrées non nulles soient autour de la diagonale afin de permettre d'afficher plusieurs matrices qui font partie de la matrice de confusion complète?

Voici un exemple pour une grande matrice de confusion .

Exemples à l'état sauvage

La figure 6 d' EMNIST a l' air bien:

entrez la description de l'image ici

Il est facile de voir où se trouvent de nombreux cas. Cependant, ce ne sont que classes. Si la page entière était utilisée au lieu d'une seule colonne, cela pourrait probablement être 3x plus, mais ce ne serait toujours que classes. Pas même près de 369 classes de HASY ou 1000 d'ImageNet.26326=78

Voir également

Ma question similaire sur CS.stackexchange

Martin Thoma
la source
Je vous plains ;-) Vous pouvez essayer les matrices de confusion de un contre tous pour chacune des classes. Compte tenu d'eux, regardez ou classes dans lesquelles le comportement n'est pas typique et utilisez une matrice de confusion complète juste sur eux.
DaL
1
Pourquoi ne pas simplement signaler l'exactitude du modèle pour chaque catégorie. Qui a vraiment besoin de voir la matrice entière?
Darrin Thomas
1
@DarrinThomas Il ne s'agit pas seulement de le signaler dans un document. Il s'agit également d'analyser moi-même les erreurs.
Martin Thoma
1
Tout d'abord, vous pouvez normaliser les valeurs par ligne, puis les tracer sous forme de carte thermique. De plus, vous pouvez trier la classe selon la précision de classe (valeur normalisée sur la diagonale). Je suppose que cela augmenterait considérablement la lisibilité.
Nikolas Rieble
1
Je devrais probablement poser à nouveau cette question dans math.SE / stackoverflow. Je suis sûr qu'il existe des algorithmes qui réordonnent les lignes / colonnes de telle manière que la plupart de la valeur est proche de la diagonale.
Martin Thoma

Réponses:

4

Vous pouvez appliquer une technique que j'ai décrite dans ma thèse de maîtrise (page 48ff) et appelée Confusion Matrix Ordering (CMO):

  1. Ordonnez les colonnes / lignes de telle manière que la plupart des erreurs se trouvent le long de la diagonale.
  2. Divisez la matrice de confusion en plusieurs blocs de sorte que les blocs simples puissent facilement être imprimés / visualisés - et de sorte que vous pouvez supprimer certains des blocs car il y a trop peu de points de données.

Bel effet secondaire: cette méthode regroupe également automatiquement des classes similaires. La figure 5.12 de ma thèse de maîtrise montre que:

entrez la description de l'image ici

Vous pouvez appliquer un ordre de matrice de confusion avec clana

Martin Thoma
la source
Voir github.com/MartinThoma/clana pour une implémentation
Martin Thoma
1

Au lieu d'essayer de réorganiser les colonnes et les lignes, je suggère d'essayer de trouver un autre moyen de visualiser les données.

Voici une suggestion alternative possible. Vous pouvez regrouper les classes, disons en ~ 20 clusters, où chaque cluster contient ~ 20 classes, en utilisant une sorte d'algorithme de clustering qui rassemble des classes similaires dans le même cluster (par exemple, si deux classes sont fréquemment confondues l'une avec l'autre, ils devraient être plus susceptibles d'être dans le même groupe). Ensuite, vous pouvez afficher une matrice de confusion à gros grains, avec une ligne / colonne par cluster; la cellule en montre à quelle fréquence une instance d'une classe du cluster devrait avoir une classe du cluster(je,j)jej. De plus, vous pouvez avoir ~ 20 matrices de confusion à grain fin: pour chaque cluster, vous pouvez afficher la matrice de confusion des classes, pour les ~ 20 classes de chaque cluster. Bien sûr, vous pouvez également étendre cela en utilisant un clustering hiérarchique et avoir des matrices de confusion à plusieurs granularités.

Il peut également y avoir d'autres stratégies de visualisation possibles.

En tant que point philosophique général: cela pourrait également aider à clarifier vos objectifs (ce que vous voulez retirer de la visualisation). Vous pouvez distinguer deux types d'utilisations de la visualisation:

  • Analyse exploratoire: vous n'êtes pas sûr de ce que vous recherchez; vous voulez juste une visualisation qui pourrait vous aider à rechercher des modèles ou des artefacts intéressants dans les données.

  • Figures avec un message: vous avez un message particulier que vous voulez que le lecteur retire et vous souhaitez concevoir une visualisation qui aide à soutenir ce message ou à fournir des preuves pour le message.

Cela pourrait vous aider à savoir ce que vous essayez de viser, puis à concevoir une visualisation visant à cela:

  • Si vous faites une analyse exploratoire, plutôt que d'essayer de choisir une visualisation parfaite, il est souvent utile d'essayer de créer autant de visualisations que vous le pensez. Ne vous inquiétez pas de savoir si l'un d'eux est parfait; c'est OK si chacun est défectueux, car chacun pourrait vous donner une perspective potentiellement différente sur les données (ce sera probablement bon à certains égards et mauvais à d'autres).

  • Si vous avez un message particulier que vous essayez de transmettre ou un thème que vous essayez de développer, recherchez une visualisation qui prend en charge ce thème. Il est difficile de faire une suggestion spécifique sans savoir quel pourrait être ce thème / message.

DW
la source
0

Il est important de savoir pourquoi la matrice de confusion EMNIST semble bonne.

Mais je trouve étrange qu'ils n'aient pas conservé la coloration avec des nombres plus élevés étant les plus sombres, par exemple la plupart des classifications manquantes vides contenant des zéros sont d'un gris plus foncé que celles qui contiennent un entier. Ne semble pas cohérent.

J'essaierais d'utiliser le style EMINST, sauf qu'il reste cohérent où la couleur indique le nombre d'entrées dans une cellule. Blanc pour zéro entrée et noir pour la plupart des entrées.

Une classification parfaite serait une diagonale noire avec des triangles supérieurs et inférieurs complètement blancs. Là où il y avait des taches grises dans les triangles, cela indiquerait des problèmes. Même sur un ensemble de 1000 classes, cela serait utile. Pour ImageNet où les classes sont hiérarchiques, le tri des colonnes afin que les sous-classes soient regroupées à droite de la classe parente conduirait à des correctifs sombres carrés.

De plus, si vous obtenez les 5 meilleures réponses pour une image, les classes peuvent ne pas s'exclure mutuellement, de sorte que la classification de chien pour une image d'un lap_dog devrait toujours être vraie, donc dans une telle matrice de confusion, les classes plus générales devraient être beaucoup plus sombres que les classifications précises (si les couleurs sont normalisées.) Par conséquent, le carré supérieur gauche serait le plus sombre.

rocklegend
la source