Je me demande comment calculer les mesures de précision et de rappel pour la classification multiclasse multi-étiquettes, c'est-à-dire la classification où il y a plus de deux étiquettes et où chaque instance peut avoir plusieurs étiquettes?
Pour la classification multi-étiquettes, vous pouvez procéder de deux manières. Considérez d'abord ce qui suit.
Les métriques sont calculées par point de données. Pour chaque étiquette prédite, son seul score est calculé, puis ces scores sont agrégés sur tous les points de données.
Il existe également d'autres paramètres.
Ici, les choses sont faites au niveau des étiquettes. Pour chaque étiquette, les métriques (par exemple, précision, rappel) sont calculées, puis ces métriques par étiquette sont agrégées. Par conséquent, dans ce cas, vous finissez par calculer la précision/le rappel pour chaque étiquette sur l'ensemble de données, comme vous le faites pour une classification binaire (car chaque étiquette a une affectation binaire), puis l'agréger.
Le moyen le plus simple est de présenter la forme générale.
Ceci est juste une extension de l'équivalent multi-classes standard.
Ici le sont respectivement les nombres vrais positifs, faux positifs, vrais négatifs et faux négatifs pour seulement étiquette .
Ici, $ B $ représente n'importe quelle métrique basée sur la matrice de confusion. Dans votre cas, vous insérez les formules standard de précision et de rappel. Pour la moyenne macro, vous passez le nombre par étiquette, puis la somme, pour la moyenne micro, vous faites d'abord la moyenne des comptages, puis appliquez votre fonction métrique.
Vous pourriez être intéressé par le code des métriques multi-étiquettes ici , qui fait partie du package mldr in R . Vous pourriez également être intéressé par la bibliothèque Java multi-label library MULAN .
Ceci est un bon article pour entrer dans les différentes métriques: ne revue sur les algorithmes d'apprentissage multi-étiquettes
La réponse est que vous devez calculer la précision et le rappel pour chaque classe, puis les faire la moyenne ensemble. Par exemple. si vous classez A, B et C, votre précision est:
(precision(A) + precision(B) + precision(C)) / 3
Idem pour le rappel.
Je ne suis pas un expert, mais c'est ce que j'ai déterminé sur la base des sources suivantes:
https://list.scms.waikato.ac.nz/pipermail/wekalist/2011-March/051575.html http://stats.stackexchange.com/questions/21551/how-to- calcul-précision-rappel-pour-classification-multiclasse-multilabel
Maintenant, pour calculer rappeler pour l'étiquette A, vous pouvez lire les valeurs de la matrice de confusion et calculer:
= TP_A/(TP_A+FN_A)
= TP_A/(Total gold labels for A)
Maintenant, calculons précision pour l'étiquette A, vous pouvez lire les valeurs de la matrice de confusion et calculer:
= TP_A/(TP_A+FP_A)
= TP_A/(Total predicted as A)
Il vous suffit de faire de même pour les autres étiquettes B et C. Cela s'applique à tout problème de classification multi-classe.
Ici est l'article complet qui explique comment calculer la précision et le rappel pour tout problème de classification multi-classe, y compris des exemples.
Dans python en utilisant sklearn
et numpy
:
from sklearn.metrics import confusion_matrix
import numpy as np
labels = ...
predictions = ...
cm = confusion_matrix(labels, predictions)
recall = np.diag(cm) / np.sum(cm, axis = 1)
precision = np.diag(cm) / np.sum(cm, axis = 0)
Une moyenne simple fera l'affaire si les classes sont équilibrées.
Sinon, le rappel pour chaque classe réelle doit être pondéré par la prévalence de la classe, et la précision de chaque étiquette prévue doit être pondérée par le biais (probabilité) pour chaque étiquette. Dans tous les cas, vous obtenez une précision aléatoire.
Un moyen plus direct est de créer un tableau de contingence normalisé (diviser par N pour que le tableau ajoute jusqu'à 1 pour chaque combinaison d'étiquette et de classe) et d'ajouter la diagonale pour obtenir la précision Rand.
Mais si les classes ne sont pas équilibrées, le biais demeure et une méthode corrigée au hasard telle que kappa est plus appropriée, ou mieux encore une analyse ROC ou une mesure correcte au hasard telle que l'information (hauteur au-dessus de la ligne de hasard en ROC).