2016-11-06 7 views
2

Ich suche diesen Datensatz: https://archive.ics.uci.edu/ml/datasets/Credit+Approval. Ich baute eine ctree:Wie man eine Konfusion Matrix zu Caret's Verwirrung senden Matrix?

myFormula<-class~.   # class is a factor of "+" or "-" 
ct <- ctree(myFormula, data = train) 

Und jetzt würde Ich mag diese Daten in die caret Konfusionsmatrix Methode setzen alle Statistiken mit der Verwirrung Matrix verbunden zu bekommen:

testPred <- predict(ct, newdata = test) 

       #### This is where I'm doing something wrong #### 
confusionMatrix(table(testPred, test$class),positive="+") 
      #### ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #### 

$positive 
[1] "+" 

$table 
     td 
testPred - + 
     - 99 6 
     + 20 88 

$overall 
     Accuracy   Kappa AccuracyLower AccuracyUpper AccuracyNull AccuracyPValue McnemarPValue 
    8.779343e-01 7.562715e-01 8.262795e-01 9.186911e-01 5.586854e-01 6.426168e-24 1.078745e-02 

$byClass 
     Sensitivity   Specificity  Pos Pred Value  Neg Pred Value   Precision    Recall     F1 
      0.9361702   0.8319328   0.8148148   0.9428571   0.8148148   0.9361702   0.8712871 
      Prevalence  Detection Rate Detection Prevalence Balanced Accuracy 
      0.4413146   0.4131455   0.5070423   0.8840515 

$mode 
[1] "sens_spec" 

$dots 
list() 

attr(,"class") 
[1] "confusionMatrix" 

So sensetivity ist:

enter image description here (von Konfusionsmatrix doc caret)

Wenn nehmen Sie meine Verwirrung Matrix:

$table 
     td 
testPred - + 
     - 99 6 
     + 20 88 

Sie können sehen, dass dies nicht summiert: Sensetivity = 99/(99+20) = 99/119 = 0.831928. In meiner Verwirrung führt Matrix dazu, dass Wert für Spezifität ist. Die Spezifität ist jedoch Specificity = D/(B+D) = 88/(88+6) = 88/94 = 0.9361702, der Wert für die Empfindlichkeit.

Ich habe dieses confusionMatrix(td,testPred, positive="+") versucht, aber noch seltsamere Ergebnisse bekommen. Was mache ich falsch?

UPDATE: Ich erkannte auch, dass meine Verwirrung Matrix als unterschiedlich ist, was caret dachte, es war: Positive und falsch negative sind rückwärts

Mine:    Caret: 

      td    testPred 
    testPred - +  td - + 
      - 99 6  - 99 20 
      + 20 88  + 6 88 

Wie Sie sehen können, ist es mein Falsch denkt.

Antwort

0

UPDATE: Ich fand es viel besser, die Daten zu senden, als eine Tabelle als Parameter. Aus dem confusionMatrix docs:

Referenz
ein Faktor von Klassen als die wahren Ergebnisse

ich das was Symbol ein positives Ergebnis bildet bedeuten nahm verwendet werden. In meinem Fall wäre dies ein +. "Referenz" bezieht sich jedoch auf die tatsächlichen Ergebnisse aus dem Datensatz, die abhängige Variable.

Also sollte ich confusionMatrix(testPred, test$class) verwendet haben. Wenn Ihre Daten aus irgendeinem Grund nicht in Ordnung sind, werden sie in die richtige Reihenfolge verschoben (damit die positiven und negativen Ergebnisse/Vorhersagen in der Konfusionsmatrix korrekt ausgerichtet sind).

Wenn Sie jedoch der richtige Faktor, installieren Sie die plyr Bibliothek ist besorgt über das Ergebnis sind, und verwenden Sie revalue den Faktor zu ändern:

install.packages("plyr") 
library(plyr) 
newDF <- df 
newDF$class <- revalue(newDF$class,c("+"=1,"-"=0)) 
# You'd have to rerun your model using newDF 

Ich bin nicht sicher, warum dies funktioniert, aber ich entfernt nur den positiven Parameter:

confusionMatrix(table(testPred, test$class)) 

Meine Verwirrung Matrix:

 td 
testPred - + 
     - 99 6 
     + 20 88 

Caret Verwirrung Matrix:

 td 
testPred - + 
     - 99 6 
     + 20 88 

Obwohl jetzt sagt, es $positive: "-" so bin ich nicht sicher, ob das gut oder schlecht ist.

Verwandte Themen