我正在使用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)
答案 0 :(得分:4)
要在此处获取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)
您现在可以训练您的知识并从"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!")
答案 1 :(得分:0)
pred_knn&lt; -prediction(knn_isolet $ y,isolet_testing $ y)
这一行可以正常工作,但根据文档,两个参数都必须是向量。
首先这样做:
knn_isolet $ y&lt; - as.vector(knn_isolet $ y,mode =&#34; numeric&#34;)
isolet_testing $ y&lt; - as.vector(isolet_testing $ y,mode =&#34; numeric&#34;)
注意:ROCR仅支持二进制分类。因此,请检查&#39; knn_isolet $ y&#39;中的级别。和&#39; isolet_testing $ y&#39;有相同的标签。