40

ROCR予測されたクラスの割合のベクトルでパッケージを使用して、いくつかのモデルがあり、パフォーマンス オブジェクトがあります。仕様「tpr」、「fpr」でパフォーマンス オブジェクトをプロットすると、ROC 曲線が得られます。

偽陽性率 (x) の特定のしきい値でモデルを比較しています。パフォーマンス オブジェクトから真陽性率 (y) の値を取得したいと考えています。さらに、そのポイントを生成するために使用されたクラス パーセンテージのしきい値を取得したいと考えています。

x-valueしきい値を超えずにしきい値に最も近い偽陽性率 ( ) のインデックス番号から、適切な真陽性率 ( y-value) のインデックス番号が得られます。そのインデックス値を取得する方法が正確にはわかりません。

さらに言えば、その点を指摘するために使用されたクラス確率のしきい値を取得するにはどうすればよいですか?

4

3 に答える 3

68

これがstr、私のお気に入りの R 関数である理由です。

library(ROCR)
data(ROCR.simple)
pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf)
> str(perf)
Formal class 'performance' [package "ROCR"] with 6 slots
  ..@ x.name      : chr "False positive rate"
  ..@ y.name      : chr "True positive rate"
  ..@ alpha.name  : chr "Cutoff"
  ..@ x.values    :List of 1
  .. ..$ : num [1:201] 0 0 0 0 0.00935 ...
      ..@ y.values    :List of 1
      .. ..$ : num [1:201] 0 0.0108 0.0215 0.0323 0.0323 ...
  ..@ alpha.values:List of 1
  .. ..$ : num [1:201] Inf 0.991 0.985 0.985 0.983 ...

ああああ!これはS4 クラスなので@、スロットへのアクセスに使用できます。を作成する方法は次のdata.frameとおりです。

cutoffs <- data.frame(cut=perf@alpha.values[[1]], fpr=perf@x.values[[1]], 
                      tpr=perf@y.values[[1]])
> head(cutoffs)
        cut         fpr        tpr
1       Inf 0.000000000 0.00000000
2 0.9910964 0.000000000 0.01075269
3 0.9846673 0.000000000 0.02150538
4 0.9845992 0.000000000 0.03225806
5 0.9834944 0.009345794 0.03225806
6 0.9706413 0.009345794 0.04301075

達成したい fpr しきい値がある場合は、これをサブセット化しdata.frameて、この fpr しきい値を下回る最大 tpr を見つけることができます。

cutoffs <- cutoffs[order(cutoffs$tpr, decreasing=TRUE),]
> head(subset(cutoffs, fpr < 0.2))
          cut       fpr       tpr
96  0.5014893 0.1495327 0.8494624
97  0.4997881 0.1588785 0.8494624
98  0.4965132 0.1682243 0.8494624
99  0.4925969 0.1775701 0.8494624
100 0.4917356 0.1869159 0.8494624
101 0.4901199 0.1962617 0.8494624
于 2013-05-02T19:13:27.853 に答える
18

パッケージには、最適なしきい値を計算するためのpROC関数が含まれています。coords

library(pROC)
my_roc <- roc(my_response, my_predictor)
coords(my_roc, "best", ret = "threshold")
于 2016-10-26T18:53:08.093 に答える