在使用carret(甚至插入符:: confusionMatrix)拟合决策树之后,我试图获得灵敏度和特异性等。我正沿着这些方向使用代码:
fit <- rpart(
Bla ~ ...
,method="class"
,data=OrginalData
)
preds <- predict(fit, SomeData)
caret::sensitivity(factor(preds[,2]), factor(OrginalData$Bla))
str(preds)
不幸的是,我认为NA是灵敏度。 Str返回:
num [1:40, 1:2] 0.926 0.926 0.926 0.926 0.926 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:40] "1" "2" "3" "4" ...
..$ : chr [1:2] "NO" "YESR"
有什么想法吗?
答案 0 :(得分:2)
问题是你提供概率的数值向量作为预测,而caret::sensitivity
期望一个类向量。这是一个使用mlbench的声纳数据的工作代码:
library(mlbench)
library(rpart)
library(caret)
data(Sonar)
拆分数据:
inds <- createDataPartition(Sonar$Class, p = 0.7, list = FALSE)
train <- Sonar[inds,]
test <- Sonar[-inds,]
创建模型:
fit <- rpart(Class ~ .,
method = "class",
data = train)
pred <- predict(fit, test)
将概率转换为预测:
caret::sensitivity(as.factor(ifelse(pred[,2] > 0.5, "R", "M")), test$Class)
#output
[1] 0.6969697
请注意,0.5作为阈值可能不合适,应根据所需的模型行为进行调整。如果对某种类型的错误没有偏好,则平衡准确度是调整概率阈值的可靠指标。
或在预测rpart时指定type = class
:
pred <- predict(fit, test, type = "class")
caret::sensitivity(pred, test$Class)