为了在此处获得 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!")