Как получить общее значение точности из confusionMatrix в R?

#r #r-caret #confusion-matrix

#r #r-каретка #путаница-матрица

Вопрос:

В библиотеке R caret, если я получу матрицу путаницы, подобную приведенной ниже, есть ли способ получить общую точность 0,992? Я не могу извлечь это единственное значение, так как мне нужно сохранить это значение и использовать его для последующей обработки. Возможно ли это вообще?

  Prediction    A    B    C    D    E
          A 1114    2    0    0    0
          B    9  745    5    0    0
          C    0    6  674    4    0
          D    0    0    3  640    0
          E    0    0    2    1  718
 

Общая статистика

             Accuracy : 0.992         
              95% CI : (0.989, 0.994)
 No Information Rate : 0.286         
 P-Value [Acc > NIR] : <2e-16        

               Kappa : 0.99          
 

Тестовое значение P Макнемара: NA

Статистика по классам:

                      Class: A Class: B Class: C Class: D Class: E
 Sensitivity             0.992    0.989    0.985    0.992    1.000
 Specificity             0.999    0.996    0.997    0.999    0.999
 Pos Pred Value          0.998    0.982    0.985    0.995    0.996
 Neg Pred Value          0.997    0.997    0.997    0.998    1.000
 Prevalence              0.286    0.192    0.174    0.164    0.183
 Detection Rate          0.284    0.190    0.172    0.163    0.183
 Detection Prevalence    0.284    0.193    0.174    0.164    0.184
 Balanced Accuracy       0.996    0.992    0.991    0.996    1.000
 

Ответ №1:

Учитывая матрицу путаницы cm , общая точность получается путем overall.accuracy <- cm$overall['Accuracy']

Это первый раз, когда я вижу caret посылку, так откуда же я это знаю?

Поскольку вы не привели пример, я искал пример кода для матриц путаницы с кареткой. Вот оно (я только добавил присваивание в последнем утверждении):

 ###################
## 3 class example

confusionMatrix(iris$Species, sample(iris$Species))

newPrior <- c(.05, .8, .15)
names(newPrior) <- levels(iris$Species)

cm <- confusionMatrix(iris$Species, sample(iris$Species))
 

Теперь давайте посмотрим, что содержится в матрице путаницы:

 > str(cm)
List of 5
 $ positive: NULL
 $ table   : 'table' int [1:3, 1:3] 13 18 19 20 13 17 17 19 14
  ..- attr(*, "dimnames")=List of 2
  .. ..$ Prediction: chr [1:3] "setosa" "versicolor" "virginica"
  .. ..$ Reference : chr [1:3] "setosa" "versicolor" "virginica"
 $ overall : Named num [1:7] 0.267 -0.1 0.198 0.345 0.333 ...
  ..- attr(*, "names")= chr [1:7] "Accuracy" "Kappa" "AccuracyLower" "AccuracyUpper" ...
 $ byClass : num [1:3, 1:8] 0.26 0.26 0.28 0.63 0.63 0.64 0.26 0.26 0.28 0.63 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "Class: setosa" "Class: versicolor" "Class: virginica"
  .. ..$ : chr [1:8] "Sensitivity" "Specificity" "Pos Pred Value" "Neg Pred Value" ...
 $ dots    : list()
 - attr(*, "class")= chr "confusionMatrix"
 

Как вы можете видеть, cm объект представляет собой список. Мы видим различную статистику «по классам» и «общую». Общая часть получается с помощью:

 overall <- cm$overall
 

Что дает нам вектор чисел со строковыми индексами:

 > overall
      Accuracy          Kappa  AccuracyLower  AccuracyUpper   AccuracyNull AccuracyPValue  McnemarPValue 
     0.2666667     -0.1000000      0.1978421      0.3449492      0.3333333      0.9674672      0.9547790 
 

Теперь извлечь соответствующее значение так же просто, как:

 > overall.accuracy <- overall['Accuracy'] 
 

Резюме: str ваш друг. Еще одна полезная функция attributes — она возвращает все атрибуты данного объекта.

Комментарии:

1. Хороший ответ, но точность возвращает строку и значение, как я могу просто получить доступ к значению? Я имею в виду двойное

2. @Emixam23 возможно, вы уже нашли решение своего вопроса, но для тех, кто ищет ответ, просто добавьте еще квадратные скобки спереди и сзади упомянутых выше скобок, например overall.accuracy <- overall[['Accuracy']]