13

Rキャレットライブラリで、以下のような混同行列が得られた場合、全体の精度0.992を取得する方法はありますか? この値を保存して後の処理に使用する必要があるため、この単一の値を取得することはできません。これはまったく可能ですか?

 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

全体統計

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

               Kappa : 0.99          

Mcnemar の検定の P 値 : NA

クラス別統計:

                     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
4

1 に答える 1

32

混同行列 が与えられるとcm、全体の精度は次のように取得されます。overall.accuracy <- cm$overall['Accuracy']

パッケージを見るのは初めてなのcaretですが、どうしてこれがわかったのですか?

例を提供しなかったので、キャレット混同行列のサンプル コードを検索しました。ここにあります(最後のステートメントに代入を追加しただけです):

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

それでは、混同行列の内容を見てみましょう。

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

ご覧のとおり、cmオブジェクトはリストです。さまざまな「クラスごと」および「全体」の統計が表示されます。全体の部分は次のように取得されます。

overall <- cm$overall

これにより、文字列インデックスを持つ数値のベクトルが得られます。

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

現在、関連する値を抽出するのは次のように簡単です。

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

要約:strあなたの友達です。もう 1 つの便利な関数はattributes、指定されたオブジェクトのすべての属性を返します。

于 2014-06-22T07:44:55.063 に答える