Comment calculer la précision et le rappel dans une matrice de confusion 3 x 3

12
                  Predicted
                    class
               Cat  Dog Rabbit
  Actual class
           Cat   5    3      0
           Dog   2    3      1
        Rabbit   0    2     11

Comment puis-je calculer la précision et le rappel pour qu'il devienne facile de calculer le score F1. La matrice de confusion normale est une dimension 2 x 2. Cependant, quand il devient 3 x 3, je ne sais pas comment calculer la précision et le rappel.

user22149
la source

Réponses:

19

Si vous définissez les définitions de précision (aka valeur prédictive positive PPV) et de rappel (aka sensibilité), vous voyez qu'elles se rapportent à une classe indépendante de toute autre classe:

Le rappel ou la senstivité est la proportion de cas correctement identifiés comme appartenant à la classe c parmi tous les cas qui appartiennent vraiment à la classe c .
(Étant donné que nous avons un cas appartenant vraiment à " c ", quelle est la probabilité de prédire cela correctement?)

La précision ou la valeur prédictive positive PPV est la proportion de cas correctement identifiés comme appartenant à la classe c parmi tous les cas dont le classificateur prétend qu'ils appartiennent à la classe c .
En d'autres termes, parmi les cas prévus pour appartenir à la classe c , quelle fraction appartient vraiment à la classe c ? (Étant donné la prédiction " c ", quelle est la probabilité d'être correct?)

valeur prédictive négative La VAN de ces cas ne devrait pas appartenir à la classe c , quelle fraction n'appartient vraiment pas à la classe c ? (Étant donné la prédiction "pas c ", quelle est la probabilité d'être correct?)

Vous pouvez donc calculer la précision et le rappel pour chacune de vos classes. Pour les tables de confusion multi-classes, ce sont les éléments diagonaux divisés respectivement par leurs sommes de ligne et de colonne:

schéma de calcul

Source: Beleites, C .; Salzer, R. & Sergo, V. Validation des modèles de classification douce à l'aide d'appartenance à des classes partielles: un concept étendu de sensibilité & co. appliquée au classement des tissus des astrocytomes, Chemom Intell Lab Syst, 122, 12 - 22 (2013). DOI: 10.1016 / j.chemolab.2012.12.003

cbeleites mécontents de SX
la source
Merci beaucoup. Je comprends déjà l'analogie décrite dans votre solution. Je vais lire du papier. J'accepterai cela comme une réponse. Je ne comprends pas PPV ET NPV.Veuillez expliquer ces concepts aussi graphiquement que les Sens et Spec ont été expliqués et j'accepterai votre réponse.
user22149
3

En réduisant les données à des choix forcés (classification) et en n'enregistrant pas s'il y a eu des «appels rapprochés», vous obtenez des estimations statistiques de précision minimale et d'informations minimales, en plus de supposer secrètement une fonction d'utilité / perte / coût étrange et d'utiliser des seuils arbitraires . Il serait bien préférable d'utiliser un maximum d'informations, qui comprendraient les probabilités d'appartenance à une classe et non des choix forcés.

Frank Harrell
la source
1

La façon la plus simple est de ne pas utiliser du tout confusion_matrix, utilisez classification_report (), cela vous donnera tout ce dont vous avez besoin, bravo ...

Edit:
c'est le format de confusion_matrix ():
[[TP, FN]
[FP, TN]]
Et le rapport de classement donne tout cela

Omkaar.K
la source
Que si vous utilisez python ///
Omkaar.K
0

Si vous voulez simplement le résultat, mon conseil serait de ne pas trop réfléchir et d'utiliser les outils à votre disposition. Voici comment vous pouvez le faire en Python;

import pandas as pd
from sklearn.metrics import classification_report

results = pd.DataFrame(
    [[1, 1],
     [1, 2],
     [1, 3],
     [2, 1],
     [2, 2],
     [2, 3],
     [3, 1],
     [3, 2],
     [3, 3]], columns=['Expected', 'Predicted'])

print(results)
print()
print(classification_report(results['Expected'], results['Predicted']))

Pour obtenir la sortie suivante

   Expected  Predicted
0         1          1
1         1          2
2         1          3
3         2          1
4         2          2
5         2          3
6         3          1
7         3          2
8         3          3

             precision    recall  f1-score   support

          1       0.33      0.33      0.33         3
          2       0.33      0.33      0.33         3
          3       0.33      0.33      0.33         3

avg / total       0.33      0.33      0.33         9
Steztric
la source
0

Voici un exemple de matrice de confusion multi-classes en supposant que nos étiquettes de classe sont A, B et C

A / P A B C Somme
A 10 3 4 17
B 2 12 6 20
C 6 3 9 18

Somme 18 18 19 55

Maintenant, nous calculons trois valeurs pour Précision et Rappel chacun et les appelons Pa, Pb et Pc; et de même Ra, Rb, Rc.

Nous savons que Précision = TP / (TP + FP), donc pour Pa, le vrai positif sera le réel A prédit comme A, c'est-à-dire 10, le reste des deux cellules de cette colonne, que ce soit B ou C, rende faux positif. Donc

Pa = 10/18 = 0,55 Ra = 10/17 = 0,59

Maintenant, la précision et le rappel pour la classe B sont Pb et Rb. Pour la classe B, le vrai positif est le B réel prédit comme B, c'est-à-dire que la cellule contenant la valeur 12 et que les deux autres cellules de cette colonne deviennent fausses positives, donc

Pb = 12/18 = 0,67 Rb = 12/20 = 0,6

De même Pc = 9/19 = 0,47 Rc = 9/18 = 0,5

Les performances globales du classificateur seront déterminées par la précision moyenne et le rappel moyen. Pour cela, nous multiplions la valeur de précision pour chaque classe par le nombre réel d'instances pour cette classe, puis nous les ajoutons et les divisons par le nombre total d'instances. Comme ,

Précision moyenne = (0,55 * 17 + 0,67 * 20 + 0,47 * 18) / 55 = 31,21 / 55 = 0,57 Rappel moyen = (0,59 * 17 + 0,6 * 20 + 0,5 * 18) / 55 = 31,03 / 55 = 0,56

J'espère que ça aide

Nayyer Masood
la source