web-dev-qa-db-fra.com

calculer l'exactitude et la précision de la matrice de confusion dans R

Existe-t-il un ensemble outil/R disponible pour calculer l'exactitude et la précision de la matrice de confusion dans R?

La formule et la structure de données sont ici

10
Ajay Singh

oui, vous pouvez calculer la précision et la précision dans R avec matrice de confusion . Il utilise Caret package .

Voici l'exemple:

lvs <- c("normal", "abnormal")
truth <- factor(rep(lvs, times = c(86, 258)),
                levels = rev(lvs))
pred <- factor(
               c(
                 rep(lvs, times = c(54, 32)),
                 rep(lvs, times = c(27, 231))),               
               levels = rev(lvs))

xtab <- table(pred, truth)
# load Caret package for computing Confusion matrix
library(caret) 
confusionMatrix(xtab)

Et Confusion Matrix pour xtab serait comme ceci:

Confusion Matrix and Statistics

          truth
pred       abnormal normal
  abnormal      231     32
  normal         27     54

               Accuracy : 0.8285
                 95% CI : (0.7844, 0.8668)
    No Information Rate : 0.75
    P-Value [Acc > NIR] : 0.0003097

                  Kappa : 0.5336
 Mcnemar's Test P-Value : 0.6025370

            Sensitivity : 0.8953
            Specificity : 0.6279
         Pos Pred Value : 0.8783
         Neg Pred Value : 0.6667
             Prevalence : 0.7500
         Detection Rate : 0.6715
   Detection Prevalence : 0.7645

       'Positive' Class : abnormal

Alors voici tout ce que vous voulez.

26
Nishu Tayal

@ Hars Trivedi

byClass vous permet d'extraire les précision et rappel du résumé. Le PPV est la précision. La sensibilité est rappel. https://en.wikipedia.org/wiki/Precision_and_recall

library(caret)

result <- confusionMatrix(prediction, truth)
precision <- result$byClass['Pos Pred Value']    
recall <- result$byClass['Sensitivity']

J'imagine que vous voulez extraire la précision et vous rappeler de calculer la f-mesure alors voilà.

f_measure <- 2 * ((precision * recall) / (precision + recall))

J'ai aussi trouvé cette calculatrice en ligne pratique pour vérifier la santé mentale. http://www.marcovanetti.com/pages/cfmatrix/?noc=2

-bg

9
BGA

Si quelqu'un a le même problème que moi, la méthode confusionMatrix() in caret donne effectivement de la sensibilité/spécificité. Cependant , s'il est alimenté par un objet de type train, il exécutera une méthode différente, confusionMatrix.train(), qui n'a pas cette information.

La solution consiste à alimenter manuellement les variables data et reference à partir de l'objet train (c'est-à-dire $pred$pred$ et $pred$obs) dans la méthode confusionMatrix()

0
ecksc