【发布时间】:2016-03-23 22:48:05
【问题描述】:
我正在尝试了解和绘制不同类型分类器的 TPR/FPR。我在 R 中使用 kNN、NaiveBayes 和决策树。使用 kNN 我正在执行以下操作:
clnum <- as.vector(diabetes.trainingLabels[,1], mode = "numeric")
dpknn <- knn(train = diabetes.training, test = diabetes.testing, cl = clnum, k=11, prob = TRUE)
prob <- attr(dpknn, "prob")
tstnum <- as.vector(diabetes.testingLabels[,1], mode = "numeric")
pred_knn <- prediction(prob, tstnum)
pred_knn <- performance(pred_knn, "tpr", "fpr")
plot(pred_knn, avg= "threshold", colorize=TRUE, lwd=3, main="ROC curve for Knn=11")
其中,diabetes.trainingLabels[,1] 是我要预测的标签(类)向量,diabetes.training 是训练数据,diabetest.testing 是 testing.data。
prob 属性中存储的值是一个数值向量(0 到 1 之间的十进制数)。我将类标签因子转换为数字,然后我可以将它与 ROCR 库中的预测/性能函数一起使用。不是 100% 确定我做对了,但至少它有效。
对于 NaiveBayes 和决策树,在 predict 函数中指定 prob/raw 参数时,我得到的不是单个数字向量,而是一个列表或矩阵向量,其中指定了每个类的概率(我猜),例如:
diabetes.model <- naiveBayes(class ~ ., data = diabetesTrainset)
diabetes.predicted <- predict(diabetes.model, diabetesTestset, type="raw")
和糖尿病预测是:
tested_negative tested_positive
[1,] 5.787252e-03 0.9942127
[2,] 8.433584e-01 0.1566416
[3,] 7.880800e-09 1.0000000
[4,] 7.568920e-01 0.2431080
[5,] 4.663958e-01 0.5336042
问题是如何使用它来绘制 ROC 曲线以及为什么在 kNN 中我得到一个向量而对于其他分类器我将它们分别用于两个类?
【问题讨论】:
标签: r machine-learning classification roc