web-dev-qa-db-ja.com

RのconfusionMatrixから全体的な精度値を取得する方法は?

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          

マクネマーの検定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
9
user697911

混同行列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オブジェクトはリストです。さまざまな「byClass」および「全体」の統計が表示されます。全体の部分は次のようにして取得されます。

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です。これは特定のオブジェクトのすべての属性を返します。

21
Boris Gorelik