R中计算曲线下面积的问题
Problem in calculating Area under curve in R
我有一个包含 50 个样本的数据集,并将其分为训练和测试数据集。我将 SVM 应用于训练数据集并预测了一个模型。
在下面,您可以从训练数据中找到 svm
列,从测试数据中找到 Predicted
列。
data <- structure(list(Samples = c("Sample1", "Sample2", "Sample3", "Sample4",
"Sample5", "Sample6", "Sample7", "Sample8", "Sample9", "Sample10",
"Sample11", "Sample12", "Sample13", "Sample14", "Sample15", "Sample16",
"Sample17", "Sample18", "Sample19", "Sample20", "Sample21", "Sample22",
"Sample23", "Sample24", "Sample25", "Sample26", "Sample27", "Sample28",
"Sample29", "Sample30", "Sample31", "Sample32", "Sample33", "Sample34",
"Sample35", "Sample36", "Sample37", "Sample38", "Sample39", "Sample40",
"Sample41", "Sample42", "Sample43", "Sample44", "Sample45", "Sample46",
"Sample47", "Sample48", "Sample49"), svm = c("typeA", "typeA",
"typeA", "typeB", "typeB", "typeB", "typeB", "typeB", "typeA",
"typeB", "typeA", "typeB", "typeA", "typeB", "typeA", "typeB",
"typeB", "typeB", "typeA", "typeA", "typeB", "typeA", "typeB",
"typeA", "typeB", "typeA", "typeA", "typeA", "typeA", "typeA",
"typeA", "typeB", "typeB", "typeB", "typeB", "typeB", "typeB",
"typeB", "typeA", "typeB", "typeA", "typeB", "typeB", "typeA",
"typeA", "typeA", "typeA", "typeA", "typeB"), Predicted = c("typeA",
"typeA", "typeA", "typeB", "typeB", "typeB", "typeB", "typeB",
"typeA", "typeB", "typeA", "typeA", "typeA", "typeB", "typeA",
"typeB", "typeB", "typeB", "typeA", "typeA", "typeB", "typeA",
"typeB", "typeA", "typeB", "typeA", "typeA", "typeA", "typeA",
"typeA", "typeA", "typeB", "typeB", "typeB", "typeB", "typeA",
"typeB", "typeB", "typeA", "typeA", "typeB", "typeB", "typeB",
"typeA", "typeA", "typeA", "typeA", "typeA", "typeB")), row.names = c(NA,
-49L), class = "data.frame")
然后我通过如下操作添加了 pred2
列:
data$pred2 <- ifelse(data$svm=="typeA", 1, 0)
我使用 pROC
包获得了 AUC
。
library(pROC)
res.roc <- roc(data$Predicted, data$pred2)
plot.roc(res.roc, print.auc = TRUE, main="")
我看过几篇文章,其中提到 AUC(曲线下面积)比准确度更能说明模型的性能。
我很困惑我计算 AUC 的方式到底是 AUC 还是 Accuracy?任何人都可以告诉这是否正确?这足以检查模型的性能吗?
我认为这个问题最好提出给 Cross Validated,但准确度 != AUC。
这里有一篇文章描述了这些差异以及一些其他可能更好的评估机器学习算法性能的指标:https://neptune.ai/blog/f1-score-accuracy-roc-auc-pr-auc
简而言之,准确性需要选择截止值,而 AUC 则不需要。
pROC 包使用 trapezoid rule
来计算 AUC。检查 pROCH::auc
函数的帮助,它有很多信息和参考。
我有一个包含 50 个样本的数据集,并将其分为训练和测试数据集。我将 SVM 应用于训练数据集并预测了一个模型。
在下面,您可以从训练数据中找到 svm
列,从测试数据中找到 Predicted
列。
data <- structure(list(Samples = c("Sample1", "Sample2", "Sample3", "Sample4",
"Sample5", "Sample6", "Sample7", "Sample8", "Sample9", "Sample10",
"Sample11", "Sample12", "Sample13", "Sample14", "Sample15", "Sample16",
"Sample17", "Sample18", "Sample19", "Sample20", "Sample21", "Sample22",
"Sample23", "Sample24", "Sample25", "Sample26", "Sample27", "Sample28",
"Sample29", "Sample30", "Sample31", "Sample32", "Sample33", "Sample34",
"Sample35", "Sample36", "Sample37", "Sample38", "Sample39", "Sample40",
"Sample41", "Sample42", "Sample43", "Sample44", "Sample45", "Sample46",
"Sample47", "Sample48", "Sample49"), svm = c("typeA", "typeA",
"typeA", "typeB", "typeB", "typeB", "typeB", "typeB", "typeA",
"typeB", "typeA", "typeB", "typeA", "typeB", "typeA", "typeB",
"typeB", "typeB", "typeA", "typeA", "typeB", "typeA", "typeB",
"typeA", "typeB", "typeA", "typeA", "typeA", "typeA", "typeA",
"typeA", "typeB", "typeB", "typeB", "typeB", "typeB", "typeB",
"typeB", "typeA", "typeB", "typeA", "typeB", "typeB", "typeA",
"typeA", "typeA", "typeA", "typeA", "typeB"), Predicted = c("typeA",
"typeA", "typeA", "typeB", "typeB", "typeB", "typeB", "typeB",
"typeA", "typeB", "typeA", "typeA", "typeA", "typeB", "typeA",
"typeB", "typeB", "typeB", "typeA", "typeA", "typeB", "typeA",
"typeB", "typeA", "typeB", "typeA", "typeA", "typeA", "typeA",
"typeA", "typeA", "typeB", "typeB", "typeB", "typeB", "typeA",
"typeB", "typeB", "typeA", "typeA", "typeB", "typeB", "typeB",
"typeA", "typeA", "typeA", "typeA", "typeA", "typeB")), row.names = c(NA,
-49L), class = "data.frame")
然后我通过如下操作添加了 pred2
列:
data$pred2 <- ifelse(data$svm=="typeA", 1, 0)
我使用 pROC
包获得了 AUC
。
library(pROC)
res.roc <- roc(data$Predicted, data$pred2)
plot.roc(res.roc, print.auc = TRUE, main="")
我看过几篇文章,其中提到 AUC(曲线下面积)比准确度更能说明模型的性能。
我很困惑我计算 AUC 的方式到底是 AUC 还是 Accuracy?任何人都可以告诉这是否正确?这足以检查模型的性能吗?
我认为这个问题最好提出给 Cross Validated,但准确度 != AUC。
这里有一篇文章描述了这些差异以及一些其他可能更好的评估机器学习算法性能的指标:https://neptune.ai/blog/f1-score-accuracy-roc-auc-pr-auc
简而言之,准确性需要选择截止值,而 AUC 则不需要。
pROC 包使用 trapezoid rule
来计算 AUC。检查 pROCH::auc
函数的帮助,它有很多信息和参考。