2014-06-22 4 views
8

In R Caret-Bibliothek, wenn ich eine Verwirrung Matrix wie folgt erhalten, wenn es eine Möglichkeit gibt, die Gesamtgenauigkeit 0.992 abrufen? Ich kann diesen einzelnen Wert nicht erhalten, da ich diesen Wert speichern und für die spätere Verarbeitung verwenden muss. Ist das überhaupt möglich?Wie wird der Gesamtgenauigkeitswert von confusionMatrix in R abgefragt?

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 

Gesamtstatistik

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

       Kappa : 0.99   

McNemar-Test-P-Wert: NA

Statistik von Klasse:

     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 

Antwort

16

eine Konfusionsmatrix cm, die Gesamtgenauigkeit Given erhalten wird durch overall.accuracy <- cm$overall['Accuracy']

Es ist das erste Mal, dass ich das caret Paket sehe, also woher wusste ich das?

Da Sie kein Beispiel angegeben haben, suchte ich nach einem example code for caret confusion matrices. Hier ist es (ich nur hinzugefügt Zuordnung in der letzten Anweisung):

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

Nun lassen Sie uns einen Blick darauf werfen, was in der Konfusionsmatrix ist:

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

Wie Sie sehen können, das cm Objekt ein Liste. Wir sehen verschiedene "byClass" und "overall" Statistiken. Der Gesamt Teil erhalten wird durch:

overall <- cm$overall 

die uns einen Vektor von Zahlen mit String-Indizes gibt:

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

Nun Extrahieren der relevanten Wert ist so einfach wie:

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

Zusammenfassung: str ist dein Freund. Eine weitere nützliche Funktion ist attributes - es gibt alle Attribute eines bestimmten Objekts zurück.

+0

Schöne Antwort aber Genauigkeit geben eine Zeichenfolge und einen Wert zurück, wie kann ich nur auf den Wert zugreifen? Ich meine das Doppelte – Emixam23

Verwandte Themen