我正在使用 ROCR 包,我想知道如何在 R 中为 knn 模型绘制 ROC 曲线?有没有办法用这个包来绘制所有内容?
我不知道如何使用ROCR对knn的预测函数。这是我的示例,我使用 UCI 存储库中的 isolet 数据集,其中我将类属性重命名为 y:
cl<-factor(isolet_training$y)
knn_isolet<-knn(isolet_training, isolet_testing, cl, k=2, prob=TRUE)
现在我的问题是,传递给 ROC 预测函数的参数是什么。我尝试了以下两种不起作用的替代方案:
library(ROCR)
pred_knn<-prediction(knn_isolet$y, cl)
pred_knn<-prediction(knn_isolet$y, isolet_testing$y)
为了获得 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!")
pred_knn<-prediction(knn_isolet$y, isolet_testing$y
这条线可以正常工作,但根据文档,两个参数都必须是向量。
所以首先要做:
knn_isolet$y <- as.vector(knn_isolet$y, mode = "numeric")
isolet_testing$y <- as.vector(isolet_testing$y, mode = "numeric")
注意:ROCR 仅支持二元分类。因此,请检查
knn_isolet$y
和 isolet_testing$y
中的级别是否具有相同的标签。