【问题标题】:getting sensitivity after fitting decision tree with caret用插入符号拟合决策树后获得灵敏度
【发布时间】:2018-01-26 05:00:10
【问题描述】:

我试图在使用 carret(甚至 caret::confusionMatrix)拟合决策树后获得敏感性和特异性等。我正在使用这些代码:

fit <- rpart(
        Bla ~ ...
        ,method="class"
        ,data=OrginalData
)

preds <- predict(fit, SomeData)

caret::sensitivity(factor(preds[,2]), factor(OrginalData$Bla))
str(preds)

不幸的是,我得到 NA 作为灵敏度。字符串返回:

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"

有什么想法吗?

【问题讨论】:

    标签: r r-caret


    【解决方案1】:

    问题是你提供了一个概率的数字向量作为预测,而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)
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2017-01-30
      • 2015-11-13
      • 2018-12-01
      • 2021-02-06
      • 2014-07-19
      • 2018-08-22
      • 2019-09-26
      • 1970-01-01
      相关资源
      最近更新 更多