2

ROCR パッケージを使用していますが、R で knn モデルの ROC 曲線をプロットするにはどうすればよいでしょうか? このパッケージですべてをプロットする方法はありますか?

knnに対するROCRの予測機能の使い方がわかりません。これが私の例です。クラス属性の名前を y に変更した UCI リポジトリの isolet データセットを使用しています。

cl<-factor(isolet_training$y)
knn_isolet<-knn(isolet_training, isolet_testing, cl, k=2, prob=TRUE)

ここで私の質問は、ROC の予測関数に渡す引数は何かということです。機能していない以下の2つの代替案を試しました:

library(ROCR)
pred_knn<-prediction(knn_isolet$y, cl)
pred_knn<-prediction(knn_isolet$y, isolet_testing$y)
4

2 に答える 2

5

ここで ROC 曲線を取得するには、いくつかの手順を実行する必要があります。使用しているデータを取得する簡単な方法が提供されていないため、いくつかのデータを作成します。パッケージは、クラス ラベルを因数ROCRではなく、正/負にすることを望んでいるので、そのようにしましょう。

# Generate fake data
isolet_training <- sweep(matrix(rnorm(400), 40, 10), 1, rep(0:1, each=20))
isolet_testing <- sweep(matrix(rnorm(400), 40, 10), 1, rep(0:1, each=20))
# Generate class labels
cl <- cl_testing <- rep(c(-1, 1), each=20)

これで、knn をトレーニングして、"prob"属性からそのクラス確率を取得できます。

knn_isolet <- class::knn(isolet_training, isolet_testing, cl, k=2, prob=TRUE)
prob <- attr(knn_isolet, "prob")
# you can probably use just `knn` instead of `class::knn`,
# but for some reason it did not work for me.

ただし、それらROCRは受け入れられない形式で提供されるため、-1クラス用に反転して再スケーリングする必要があります。

prob <- 2*ifelse(knn_isolet == "-1", 1-prob, prob) - 1

これで、「確率」をROCRパッケージの関数にフィードして、ROC 曲線を取得できます。

pred_knn <- prediction(prob, cl_testing)
pred_knn <- performance(pred_knn, "tpr", "fpr")
plot(pred_knn, avg= "threshold", colorize=T, lwd=3, main="Voilà, a ROC curve!")

ここに画像の説明を入力

于 2012-08-02T12:04:18.000 に答える