决策树概率结果的阈值设置

3

在执行决策树模型后,我尝试计算混淆矩阵。

# tree model
tree <- rpart(LoanStatus_B ~.,data=train, method='class')
# confusion matrix
pdata <- predict(tree, newdata = test, type = "class")
confusionMatrix(data = pdata, reference = test$LoanStatus_B, positive = "1")

如何设置混淆矩阵的阈值,比如说我想将概率设为默认阈值,设为0.2以上作为二元结果。


请查看?predict.rpart以了解您可以为type指定的其他内容。 - coffeinjunky
1个回答

2

这里有几点需要注意。首先,确保在进行预测时获取类别概率。如果使用预测类型="class",则只会得到离散的类别,因此您想要的是不可能的。所以您需要将其设置为"p",像下面我的代码一样。

library(rpart)
data(iris)

iris$Y <- ifelse(iris$Species=="setosa",1,0)

# tree model
tree <- rpart(Y ~Sepal.Width,data=iris, method='class')

# predictions
pdata <- as.data.frame(predict(tree, newdata = iris, type = "p"))
head(pdata)

# confusion matrix
table(iris$Y, pdata$`1` > .5)

请注意,这里的0.5只是任意值,您可以将其更改为任何您想要的值。
我认为没有必要使用“confusionMatrix”函数,因为可以通过以下方式简单地创建混淆矩阵,并允许您轻松更改截止值以实现目标。
话虽如此,如果您确实想要使用“confusionMatrix”函数来创建混淆矩阵,则可以首先根据您的自定义截止值创建一个离散类预测,如下所示:
pdata$my_custom_predicted_class <- ifelse(pdata$`1` > .5, 1, 0)

再次提醒,0.5是您自定义的阈值,可以根据您的需要设置。

caret::confusionMatrix(data = pdata$my_custom_predicted_class, 
                  reference = iris$Y, positive = "1")
Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 94 19
         1  6 31

               Accuracy : 0.8333          
                 95% CI : (0.7639, 0.8891)
    No Information Rate : 0.6667          
    P-Value [Acc > NIR] : 3.661e-06       

                  Kappa : 0.5989          
 Mcnemar's Test P-Value : 0.0164          

            Sensitivity : 0.6200          
            Specificity : 0.9400          
         Pos Pred Value : 0.8378          
         Neg Pred Value : 0.8319          
             Prevalence : 0.3333          
         Detection Rate : 0.2067          
   Detection Prevalence : 0.2467          
      Balanced Accuracy : 0.7800          

       'Positive' Class : 1

明白了。非常感谢!一个简单的问题:type = "p" 在那里做什么? - Pumpkin C
@PumpkinC 不用谢;“p”代表概率。它的意思是为每个类别提供预测概率。 - Hack-R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接