web-dev-qa-db-ja.com

1つのプロットROCR内の複数のROC曲線

ROCRパッケージを使用して、同じプロットに異なる分類器のroc曲線をプロットすることは可能ですか?私はもう試した:

>plot(perf.neuralNet, colorize=TRUE)
>lines(perf.randomForest)

しかし、私は得る:

Error en as.double(y) : 
  cannot coerce type 'S4' to vector of type 'double'

ありがとうございました!

21
kahlo

lines- approachの問題は、performanceパッケージで定義されたクラスROCRのオブジェクトに対して汎用S4行関数がないことです。ただし、追加のadd = TRUE引数を使用した場合と同様に、汎用プロット関数を使用できます。たとえば、これは?plot.performanceのサンプルページの一部です。

library(ROCR)
data(ROCR.simple)
pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels )
pred2 <- prediction(abs(ROCR.simple$predictions + 
                        rnorm(length(ROCR.simple$predictions), 0, 0.1)), 
        ROCR.simple$labels)
perf <- performance( pred, "tpr", "fpr" )
perf2 <- performance(pred2, "tpr", "fpr")
plot( perf, colorize = TRUE)
plot(perf2, add = TRUE, colorize = TRUE)

または、すべての予測をマトリックスに保存し、後続のすべてのステップを1つで実行できます。

preds <- cbind(p1 = ROCR.simple$predictions, 
                p2 = abs(ROCR.simple$predictions + 
                rnorm(length(ROCR.simple$predictions), 0, 0.1)))

pred.mat <- prediction(preds, labels = matrix(ROCR.simple$labels, 
                nrow = length(ROCR.simple$labels), ncol = 2) )

perf.mat <- performance(pred.mat, "tpr", "fpr")
plot(perf.mat, colorize = TRUE)

ところで、何らかの理由でlinesを使用して連続したROC曲線をプロットしたい場合は、sthを実行する必要があります。このような:

plot(perf) 
lines([email protected][[1]], [email protected][[1]], col = 2)
35
adibender

@adibenderのエコーとコメントの追加:この例では、2番目の(一度にプロットする)アプローチを使用して個々の曲線に個別の色を設定する方法については説明しません。この場合、colをリストとして渡します。

library(ROCR)
data(ROCR.hiv)
x   <- prediction(ROCR.hiv$hiv.nn$predictions, ROCR.hiv$hiv.nn$labels)
ROC <- performance(x, "tpr", "fpr")
plot(ROC, col = as.list(1:10))
2
Scott Kaiser

Rには、1つのウィンドウに複数のプロットを描くための関数があります。パッケージが1つのウィンドウで複数のプロットをサポートしていない場合、Rの標準計器で問題を解決できます。他の方法: 複数のROCの例 このスクリプトの記事: ROCの例ROCRでプロットした曲線

1
psyprog