我希望在使用T(columnA)
包进行交叉验证后,从我的二元分类器中获取曲线下面积(AUC)。
对于标准混淆矩阵,我使用caret
中的average
参数。
示例:
caret::confusionMatrix
然后混淆矩阵用于精确度,F1等。
controls = trainControl(method="repeatedcv"
, number=5
, repeats=10
, selectionFunction = "oneSE"
, classProbs = T
, summaryFunction = twoClassSummary
)
svm_5k = train(veracity ~ .
, data = training_data
, method = "svmLinear"
, trControl = controls
, verbose = FALSE
, metric = 'ROC'
)
现在我与AUC斗争:我现在正在检索类probs并将它们作为列附加到测试数据,如confmat = caret::confusionMatrix(svm_5k
, 'average')
如果我然后使用testing_data$prob = predict(svm_5k, testing_data, type='prob')[,2]
包来获得类似
pROC
...
...我没有使用roc(response = testing_data$veracity, predictor = testing_data$prob)
中指示的交叉验证,而只是分类器的快照。
有没有办法使用CV中的平均概率来获得AUC?
答案 0 :(得分:0)
尝试
auc <- auc(roc)
sens <- roc$sensitivities[2]
spec <- roc$specificities[2]
现在你可以获得你需要的所有东西,如灵敏度,特殊性和曲线下的区域。
&
答案 1 :(得分:0)
我遇到了相同的问题,您想要的内容存储在svm_5k$pred
下的模型中。
要绘制AUC,您可以执行以下操作:
library(ggplot2)
library(plotROC)
ggplot(svm_5k$pred,
aes(m = M, d = factor(obs, levels = c("R", "M")))) +
geom_roc(hjust = -0.4, vjust = 1.5) + coord_equal()
其中M
是一个值取决于svm_5k$pred
下的模型。 “ R”和“ M”只是标签。
因此,在我的情况下,m = Yes
和levels = c("Yes", "No")
。像这样