r - 如何绘制 knn 模型的 ROC 曲线

标签 r knn roc

我正在使用 ROCR 包,我想知道如何在 R 中为 knn 模型绘制 ROC 曲线?有没有办法用这个包来绘制这一切?

不知道knn的ROCR的预测功能怎么用。这是我的示例,我正在使用 UCI 存储库中的 isolet 数据集,我在其中将类属性重命名为 y:

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

现在我的问题是,传递给 ROC 预测函数的参数是什么。我尝试了以下 2 种无效的替代方法:

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

enter image description here

关于r - 如何绘制 knn 模型的 ROC 曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11741599/

相关文章:

R:查找数据框中列列表的最大值/最小值

java - K最近邻距离

R:使用ROCR绘制多条不同颜色的ROC曲线

machine-learning - 混淆矩阵和ROC曲线

c++ - 使用openmp和段错误的并行K最近邻

matlab - 带 ROC 分析的 KNN 分类器

r - 这似乎工作正常但保持 "command #Bugs:gen.inits cannot be executed (is greyed out)"

javascript - Shiny 中的单独列搜索(选择输入) renderDatatable()

删除 R 中不包含特定字符串的所有行

python - 如何在 KNN 中的 minkowski 度量中设置 p < 1?