如何绘制一个KNN模型ROC曲线(How to plot a ROC curve for a knn

2019-07-30 17:06发布

我使用ROCR包,我想知道一个人如何可以绘制ROC曲线中的R KNN模型? 有没有办法用这个包绘制这一切?

我不知道如何使用ROCR的预测功能KNN。 这里,我使用isolet数据集从UCI库,在这里我改名类属性为y我的例子:

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

现在的问题是,什么是传递给中华民国的预测函数的参数。 我试过2以下未工作方案:

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

Answer 1:

有几个步骤,以在这里得到你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!")



Answer 2:

pred_knn < -预测(knn_isolet $ Y,isolet_testing $ y)的

这条线会工作得很好,但根据文件,双方的观点必须是载体。

因此,首先要做:

knn_isolet $ Y < - as.vector(knn_isolet $ Y,模式= “数字”)

isolet_testing $ Y < - as.vector(isolet_testing $ Y,模式= “数字”)

注:ROCR只支持二元分类。 所以,检查是否在“knn_isolet $ Y”和“isolet_testing $ Y”水平具有相同的标签。



文章来源: How to plot a ROC curve for a knn model
标签: r knn roc