有没有办法改变插入符号R中模型内分类的阈值?

问题描述

我想更改模型的阈值,并且遇到交叉验证线程How to change threshold for classification in R randomForests?

中的帖子

如果更改阈值后创建模型,则意味着我将不得不再次调整测试数据或新数据的内容

R&caret中是否有一种方法可以更改模型中的阈值,以便我可以对新数据或测试数据运行具有相同阈值的相同模型?

解决方法

概率分类器中,例如随机森林,在模型拟合期间没有任何阈值涉及,也没有与拟合模型相关联的阈值;因此,实际上没有任何更改。正如CV线程Reduce Classification Probability Threshold中正确指出的那样:

选择一个阈值,将新的观察值分类为1 vs. 0,这不再是统计的一部分。它是决定组件的一部分。

引用我在Change threshold value for Random Forest classifier中的回答:

在模型训练期间根本没有没有阈值;随机森林是概率分类器,它仅输出类概率。确实需要阈值的“硬”类(即0/1)在模型训练的任何阶段都不会生成或使用-仅在预测期间,甚至只有在我们确实需要硬分类的情况下(并非总是如此)案子)。有关更多详细信息,请参见Predict classes or class probabilities?

因此,如果您从拟合模型中生成预测,请使用参数rftype = "prob",如您链接到的CV线程所示:

pred <- predict(rf,mydata,type = "prob")

这些预测将是[0,1]中的概率值,而不是硬类0/1中的概率值。从这里,您可以自由选择阈值,如答案所示:

thresh <- 0.6  # any desired value in [0,1]
class_pred <- c()
class_pred[pred <= thresh] <- 0
class_pred[pred >  thresh] <- 1

或者当然可以使用不同的阈值进行实验,而无需更改模型本身中的任何内容。