我想更改模型的阈值,并查看了类似于Cross Validated讨论区中的帖子如何在R中更改randomForests的分类阈值?
如果在创建模型后更改阈值,这意味着我将不得不再次调整测试数据或新数据的设置。
在R语言和caret
包中,有没有办法可以在模型内部更改阈值,以便我可以用相同的阈值在新数据或测试数据上运行相同的模型?
回答:
在像随机森林这样的概率分类器中,模型拟合过程中并不涉及任何阈值,也没有与已拟合模型相关的阈值;因此,实际上没有任何东西可以更改。正如CV讨论区中正确指出的降低分类概率阈值:
选择一个阈值来将新观察分类为1或0不再是统计的一部分。这是决策组件的一部分。
引用我在更改随机森林分类器的阈值中的回答:
在模型训练过程中根本没有阈值;随机森林是一个概率分类器,它只输出类别概率。“硬”类别(即0/1),确实需要阈值,既不产生也不在模型训练的任何阶段使用 – 只有在预测时,并且即使在这种情况下,也只有在我们确实需要硬分类时(并非总是如此)。请参阅预测类别或类别概率?以获取更多详情。
因此,如果你从一个拟合模型(假设为rf
)中生成预测,并使用参数type = "prob"
,如你所链接的CV讨论区中所示:
pred <- predict(rf, mydata, type = "prob")
这些预测将是[0, 1]
范围内的概率值,而不是硬类别0/1
。从这里开始,你可以自由选择阈值,如那里的答案所示,即:
thresh <- 0.6 # 在[0, 1]范围内的任何所需值class_pred <- c()class_pred[pred <= thresh] <- 0class_pred[pred > thresh] <- 1
当然,你也可以尝试不同的阈值,而无需更改模型本身的任何内容。