在分类中使用mlr,将下采样后的预测概率转换为实际概率

8

如果我在处理不平衡的二元目标变量时使用欠采样来训练模型,那么预测方法会在假设数据集平衡的情况下计算概率。我该如何将这些概率转换为非平衡数据的实际概率?mlr包或其他包中是否实现了转换参数/函数?例如:

a <- data.frame(y=factor(sample(0:1, prob = c(0.1,0.9), replace=T, size=100)))
a$x <- as.numeric(a$y)+rnorm(n=100, sd=1)
task <- makeClassifTask(data=a, target="y", positive="0")
learner <- makeLearner("classif.binomial", predict.type="prob")
learner <- makeUndersampleWrapper(learner, usw.rate = 0.1, usw.cl = "1")
model <- train(learner, task, subset = 1:50)
pred <- predict(model, task, subset = 51:100)
head(pred$data)
1个回答

11

一种非常简单但强大的方法是由[Dal Pozzolo et al., 2015]提出的。

论文标题:“使用欠采样校准概率进行不平衡分类”Andrea Dal Pozzolo,Olivier Caelen†,Reid A. Johnson,Gianluca Bontempi

它专门设计用于解决在下采样情况下校准问题(即将分类器预测的概率转换为不平衡情况下的实际概率)。

您只需使用以下公式来更正预测概率p_s:

   p = beta * p_s / ((beta-1) * p_s + 1)

beta是欠采样后多数类实例数与原始训练集中多数类实例数的比率。

其他方法还有一些方法不是专门针对降采样偏差的。其中最流行的方法如下:

它们都在R中实现。


我还发现了另一个公式:1/(1+(1/原始分数-1)/(1/过采样分数-1)*(1/评分结果-1));它在这里有描述:http://www.data-mining-blog.com/tips-and-tutorials/overrepresentation-oversampling/,并且也使用了“过采样”分数。这两个公式给出的结果略有不同。有人知道哪个更好/何时使用哪个吗? - tover
1
我没有仔细阅读你的文章,但它是关于在少数类别上进行过采样,而 Dal Pozzolo 的公式则是在多数类别上进行欠采样。因此,它们不适用于相同的情况。 - Pop
我必须纠正自己:两个公式的结果几乎完全相同(至少在我使用的示例中)。然而,我仍然很好奇为什么要使用data-mining.blog中更复杂的公式,或者在其他情况下可能存在更大的差异。 - tover
1
很难说,因为这篇博客中没有这个公式的导出或解释... 在stats.stackexchange上提问可能是值得的。 - Pop
“where beta is the ratio of the number majority class instances after undersampling over the number majority class ones in the original training set.”的意思是,如果多数类是负类,并且从n减少到m,则beta = n/m。但是如果多数类是正类,会有什么变化吗?谢谢。 - Chuck
显示剩余2条评论

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