gpt4 book ai didi

r - 不同分类器的 TPR 和 FPR 曲线 - R 中的 kNN、朴素贝叶斯、决策树

转载 作者:行者123 更新时间:2023-11-30 08:23:21 28 4
gpt4 key购买 nike

我正在尝试理解并绘制不同类型分类器的 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是训练数据,diabetes.testing是测试数据。

情节如下: enter image description here

存储在 prob 属性中的值是一个数值向量(0 到 1 之间的小数)。我将类标签因子转换为数字,然后可以将其与 ROCR 库中的预测/性能函数一起使用。不能 100% 确定我这样做是正确的,但至少它有效。

对于 NaiveBayes 和决策树,在预测函数中指定了概率/原始参数时,我没有得到单个数字向量,而是得到了列表或矩阵的向量,其中指定了每个类的概率(我猜),例如:

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 中我得到一个向量,而对于其他分类器我将它们分别用于两个类?

最佳答案

ROC曲线

您为 knn11 分类器提供的 ROC 曲线看起来不正常 - 它位于对角线下方,表明您的分类器正确分配类标签的概率小于小于 50%。最有可能发生的情况是您提供了错误的类标签或错误的概率。如果在训练中您使用了 0 和 1 的类标签 - 这些相同的类标签应该以相同的顺序传递到 ROC 曲线(没有 0 和 1 翻转)。

另一个不太可能的可能性是你有一个非常奇怪的数据集。

其他分类器的概率

ROC 曲线是为了调用雷达事件而开发的。从技术上讲,它与预测事件密切相关——您正确猜测飞机从雷达接近的概率。所以它使用一种概率。当有人对“命中”概率不明显的两个类别进行分类时,这可能会令人困惑,就像您有案例和对照的情况一样。

但是,任何两类分类都可以用“命中”和“未命中”来术语 - 您只需选择一个称为“事件”的类即可。在您的情况下,患有糖尿病可能被称为一个事件。

从这个表来看:

 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

您只需选择一个概率 - 事件的概率 - 可能是“tested_positive”。另一个“tested_阴性”只是 1-tested_positive 因为当分类器认为某个人患有糖尿病的可能性为 79% 时,他同时“认为”该人有 21% 的可能性没有糖尿病。但你只需要一个数字来表达这个想法,所以 knn 只返回 1,而其他分类器可以返回 2。

我不知道您使用哪个库用于决策树,因此无法帮助该分类器的输出。

关于r - 不同分类器的 TPR 和 FPR 曲线 - R 中的 kNN、朴素贝叶斯、决策树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com