Вычислить точность и точность матрицы путаницы в R

Есть ли какой-либо пакет инструментов /R для вычисления точности и точности матрицы путаницы в R?

Формула и структура данных здесь

Ответ 1

да, вы можете рассчитать Точность и точность в R с помощью путаницы. Он использует пакет Caret.

Вот пример:

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)

И Матрица Confusion для xtab будет выглядеть следующим образом:

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 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

Итак, вот все, чего вы хотите.

Ответ 2

@Harsh Trivedi

byClass позволяет вытащить точность и вызвать из сводки. PPV - точность. Чувствительность вызвана. https://en.wikipedia.org/wiki/Precision_and_recall

library(caret)

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

Я предполагаю, что вы хотите вытащить точность и вспомнить, чтобы вычислить f-меру, и вот здесь.

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

Я также нашел этот удобный онлайн-калькулятор для проверки работоспособности. http://www.marcovanetti.com/pages/cfmatrix/?noc=2

-bg

Ответ 3

В случае, если кто-либо имеет ту же проблему, что и я, метод confusionMatrix() в caret действительно дает чувствительность/специфичность. Однако, если он загружен объектом типа train, он будет запускать другой метод, confusionMatrix.train(), который имеет не эту информацию.

Решение состоит в том, чтобы вручную передать data и reference из объекта train (т.е. $pred$pred$ и $pred$obs) в метод confusionMatrix().

Ответ 4

В случае, если кто-то еще ищет: благодаря ответу BGA, приведенному выше, я стал более понятным, как читать вывод confusionMatrix() и понял, что вы можете получить F-меру прямо из result$ByClass как F1.

 result$byClass
         Sensitivity          Specificity       Pos Pred Value       Neg Pred Value 
           0.9337442            0.8130531            0.8776249            0.8952497 
           Precision               Recall                   F1           Prevalence 
           0.8776249            0.9337442            0.9048152            0.5894641 
      Detection Rate Detection Prevalence    Balanced Accuracy 
           0.5504087            0.6271571            0.8733987 

Вычисление f_measure ниже по той же формуле, что и в предыдущем комментарии, также дает 0.9048152.

Вы также можете получить Точность от results$overall

result$overall
      Accuracy          Kappa  AccuracyLower  AccuracyUpper   AccuracyNull AccuracyPValue 
  8.841962e-01   7.573509e-01   8.743763e-01   8.935033e-01   5.894641e-01   0.000000e+00 
 McnemarPValue 
  2.745521e-13

Или используйте Сбалансированную Точность от results