用插入符号拟合决策树后获得灵敏度

时间:2018-01-25 19:09:17

标签: r r-caret

在使用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"

有什么想法吗?

1 个答案:

答案 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)