2014-06-22 25 views
8

W bibliotece R caret, jeśli mam taką matrycę jak poniżej, czy istnieje sposób na odzyskanie ogólnej dokładności 0.992? Nie mogę uzyskać tej pojedynczej wartości, ponieważ muszę przechowywać tę wartość i używać jej do późniejszego przetwarzania. Czy to w ogóle możliwe?Jak uzyskać ogólną wartość dokładności od confusionMatrix in R?

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 

Ogólne statystyki

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

       Kappa : 0.99   

McNemar za test wartość p: NA

Statystyki według klas:

     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 

Odpowiedz

16

otrzymuje matryca zamieszanie cm ogólna dokładność uzyskuje się przez overall.accuracy <- cm$overall['Accuracy']

Po raz pierwszy widzę pakiet caret, więc skąd o tym wiedziałem?

Ponieważ nie podałeś przykładu, szukałem example code for caret confusion matrices. Oto ona (ja tylko dodaje przypisanie w ostatnim oświadczeniem):

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

Teraz rzućmy okiem Co znajduje się w matrycy zamieszania

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

Jak widać, obiekt cm jest lista. Widzimy różne statystyki "byClass" i "ogólne". Ogólnym część uzyskuje się przez:

overall <- cm$overall 

co daje nam wektor liczb z indeksami wyrażenie:

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

Teraz wydobywania odpowiednią wartość jest tak proste, jak:

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

Podsumowanie: str jest twoim przyjacielem. Kolejną przydatną funkcją jest attributes - zwraca wszystkie atrybuty danego obiektu.

+0

Dobra odpowiedź, ale dokładność zwraca ciąg znaków i wartość, w jaki sposób mogę uzyskać dostęp do wartości? Mam na myśli podwójne – Emixam23