2014-06-22 15 views
8

Nella libreria Raret, se ho ottenuto una matrice di confusione come questa di seguito, se esiste un modo per recuperare l'accuratezza complessiva 0.992? Non riesco a ottenere questo singolo valore, dal momento che ho bisogno di memorizzare questo valore e usarlo per l'elaborazione successiva. Ciò è effettivamente possibile?Come recuperare il valore complessivo della precisione da 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 

generale Statistiche

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

       Kappa : 0.99   

di McNemar test P-Value: NA

Statistiche per classe:

     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 

risposta

16

Data una matrice di confusione cm, l'accuratezza complessiva è ottenuta overall.accuracy <- cm$overall['Accuracy']

È la prima volta che vedo il pacchetto caret, quindi come ho fatto a saperlo?

Poiché non è stato fornito un esempio, ho cercato uno example code for caret confusion matrices. Qui è (Ho solo assegnazione aggiunto nell'ultima istruzione):

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

Ora, diamo uno sguardo ciò che è nella matrice di confusione:

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

Come si può vedere, l'oggetto cm è un elenco. Vediamo varie statistiche "byClass" e "generali". La parte generale è ottenuto:

overall <- cm$overall 

Il che ci dà un vettore di numeri con gli indici di stringa:

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

Ora, l'estrazione del relativo valore è semplice come:

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

Sommario: str è tuo amico. Un'altra funzione utile è attributes - restituisce tutti gli attributi di un determinato oggetto.

+0

Risposta piacevole ma la precisione restituisce una stringa e un valore, come posso accedere al valore? Intendo il doppio – Emixam23