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.
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:
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.
Voir également
Ma question similaire sur CS.stackexchange
la source
Réponses:
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):
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:
Vous pouvez appliquer un ordre de matrice de confusion avec
clana
la source
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( i , j ) je j . 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.
la source
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.
la source