ここで 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!")