我正在尝试理解和绘制不同类型分类器的TPR/FPR.我在R中使用kNN,NaiveBayes和Decision Trees.对于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和Decision Trees tho,在预测函数中使用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中我得到一个向量而对于其他分类我将它们分别用于两个类?