#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']]