为什么来自 ggplot 的 geom_roc 与 plot.roc 在 ROC 上有如此大的差异?
Why is geom_roc from ggplot vs plot.roc giving such drastic difference in ROC?
我想我有一个培训发送到这里。
library(caret)
library(mlbench)
library(plotROC)
library(pROC)
data(Sonar)
ctrl <- trainControl(method="cv",
summaryFunction=twoClassSummary,
classProbs=T,
savePredictions = T)
rfFit <- train(Class ~ ., data=Sonar,
method="rf", preProc=c("center", "scale"),
trControl=ctrl)
# Select a parameter setting
selectedIndices <- rfFit$pred$mtry == 2
我想绘制 ROC。
plot.roc(rfFit$pred$obs[selectedIndices],
rfFit$pred$M[selectedIndices])
然而,当我尝试 ggplot2 方法时,它给了我完全不同的东西。
g <- ggplot(rfFit$pred[selectedIndices, ], aes(m=M, d=factor(obs, levels = c("R", "M")))) +
geom_roc(n.cuts=0) +
coord_equal() +
style_roc()
g + annotate("text", x=0.75, y=0.25, label=paste("AUC =", round((calc_auc(g))$AUC, 4)))
我在这里确实做错了什么,但我无法弄清楚它是什么。
谢谢。
geom_roc
忽略了您的因子水平的顺序。请注意,无论以哪种方式分配 levels = c('R', 'M')
,您都会收到警告:
#> Warning message:
#> In verify_d(data$d) : D not labeled 0/1, assuming M = 0 and R = 1!
这意味着您将获得 'anti-prediction' 的 ROC(即与您的模型实际做出的预测相反)。因此它是实际ROC的镜像。
您需要将预测显式转换为 1 和 0 的数字列:
g <- ggplot(rfFit$pred[selectedIndices, ],
aes(m=M, d= as.numeric(factor(obs, levels = c("R", "M"))) - 1)) +
geom_roc(n.cuts=0) +
coord_equal() +
style_roc()
g + annotate("text", x=0.75, y=0.25,
label=paste("AUC =", round((calc_auc(g))$AUC, 4)))
我想我有一个培训发送到这里。
library(caret)
library(mlbench)
library(plotROC)
library(pROC)
data(Sonar)
ctrl <- trainControl(method="cv",
summaryFunction=twoClassSummary,
classProbs=T,
savePredictions = T)
rfFit <- train(Class ~ ., data=Sonar,
method="rf", preProc=c("center", "scale"),
trControl=ctrl)
# Select a parameter setting
selectedIndices <- rfFit$pred$mtry == 2
我想绘制 ROC。
plot.roc(rfFit$pred$obs[selectedIndices],
rfFit$pred$M[selectedIndices])
然而,当我尝试 ggplot2 方法时,它给了我完全不同的东西。
g <- ggplot(rfFit$pred[selectedIndices, ], aes(m=M, d=factor(obs, levels = c("R", "M")))) +
geom_roc(n.cuts=0) +
coord_equal() +
style_roc()
g + annotate("text", x=0.75, y=0.25, label=paste("AUC =", round((calc_auc(g))$AUC, 4)))
我在这里确实做错了什么,但我无法弄清楚它是什么。 谢谢。
geom_roc
忽略了您的因子水平的顺序。请注意,无论以哪种方式分配 levels = c('R', 'M')
,您都会收到警告:
#> Warning message:
#> In verify_d(data$d) : D not labeled 0/1, assuming M = 0 and R = 1!
这意味着您将获得 'anti-prediction' 的 ROC(即与您的模型实际做出的预测相反)。因此它是实际ROC的镜像。
您需要将预测显式转换为 1 和 0 的数字列:
g <- ggplot(rfFit$pred[selectedIndices, ],
aes(m=M, d= as.numeric(factor(obs, levels = c("R", "M"))) - 1)) +
geom_roc(n.cuts=0) +
coord_equal() +
style_roc()
g + annotate("text", x=0.75, y=0.25,
label=paste("AUC =", round((calc_auc(g))$AUC, 4)))