2016-11-06 20 views
2

私はこのデータセットを見ています:https://archive.ics.uci.edu/ml/datasets/Credit+Approval。私はctree建て:混乱行列をキャレットの混乱に送る方法Matrix?

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

をそして今、私は混乱行列に関連付けられているすべての統計情報を取得するためにキャレットのconfusionMatrixメソッドにそのデータを入れたいのですが:

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" 

のでSensetivityは次のとおりです。

(キャレットのconfusionMatrixドキュメントから)

enter image description here

あなたは私の混同行列取る場合:

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

これは、合計ではないことがわかります。Sensetivity = 99/(99+20) = 99/119 = 0.831928。私の混乱Matrixの結果では、その値はSpecificityの値です。しかし、SpecificityはSensitivityの値であるSpecificity = D/(B+D) = 88/(88+6) = 88/94 = 0.9361702です。

私はこれを試しましたが、confusionMatrix(td,testPred, positive="+")の結果はさらに怪しいです。私は間違って何をしていますか?

UPDATE:私も私の混同行列がキャレットはそれが思ったものよりも異なっていることに気づい:

Mine:    Caret: 

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

あなたが見ることができるように、それは私の偽陽性と偽陰性が後方にあると考えています。

答えて

0

UPDATE:パラメータとしてテーブルではなく、データを送信する方がはるかに優れていることがわかりました。 confusionMatrixドキュメントから:

参照
真の結果

として使用するクラスの要因は、私は肯定的な結果を構成するもののシンボルを意味するため、これを取りました。私の場合、これは+でした。しかし、「参照」とは、データセットからの実際の結果、つまり従属変数を指します。

だから私はconfusionMatrix(testPred, test$class)を使っていたはずです。あなたのデータが何らかの理由で故障している場合、それは正しい順序にシフトされます(正と負の結果/予測が混同行列に正しく整列します)。

あなたは結果が正しい要因であることを心配している場合は、plyrライブラリをインストールし、要因を変更するrevalueを使用します。

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

これは働いていた私はなぜわからないんだけど、

confusionMatrix(table(testPred, test$class)) 

私の混乱マトリックス:

が、私はちょうど正のパラメータを削除しました
 td 
testPred - + 
     - 99 6 
     + 20 88 

キャレットの混乱マトリックス:

 td 
testPred - + 
     - 99 6 
     + 20 88 

、今では$positive: "-"ので、私はそれが良いか悪いかはわからないと言いますが。