你怎么知道你的分类器正遭受类不平衡的困扰?

机器算法验证 分类 不平衡类
2022-03-08 02:23:30

在相对类频率存在显着差异的情况下,少数类的密度可能永远不会高于属性空间中任何地方的多数类的密度。这是一个使用单变量高斯类的简单示例,不平衡比为 1:9。

在此处输入图像描述

在这种情况下,如果我的分类器将所有模式分配给多数类,那么它正在做完全正确的事情,并且没有问题需要解决。

在这种情况下,我们知道了真实的数据生成过程,因此我们知道分类器正在做正确的事情。但是一般来说,我们不知道正类和负类的真实分布,所以我们不知道分类器是否在做正确的事情。

所以我的问题是:在实际应用中,我们如何确定是否存在类不平衡问题,或者分类器是否只是给出了正确答案?

完全披露:我的直觉是,在大多数情况下,尤其是当数据不是过度稀缺时,分类器正在做它应该做的事情,并且不存在类不平衡问题。我主要想听听其他从业者和研究人员如何诊断阶级不平衡问题。

3个回答

我挑战存在问题。让我们使用您在评论中描述的场景,您的红色图表向右移动了一点。

在此处输入图像描述

我将组成一些(合理的)数字并通过贝叶斯定理。

P(red)=0.2
P(blue)=0.8

P(X>3|red)=0.6
P(X>3|blue)=0.05

现在贝叶斯定理:

P(red|X>3)=P(X>3|red)P(red)P(X>3)

P(X>3)=P(X>3red)+P(X>3redC)
=P(X>3red)+P(X>3blue)
=P(X>3|red)P(red)+P(X>3|blue)P(blue)
=(0.6)(0.2)+(0.05)(0.8)=0.16

现在让我们将它们放在贝叶斯定理中。

P(red|X>3)=(0.6)(0.2)(0.16)=0.75

的先验概率要大得多0.2

改变红的先验概率揭示了一个类似的故事,即红的后验概率始终高于红的先验概率。

posterior <- function(x, y, z){
    return(x*y/(x*y + z*(1-x)))
}
prior <- seq(0, 1, 0.0001)
plot(prior, posterior(prior, 0.6, 0.05), xlab = "Prior of Red", ylab = "Posterior of Red", col = 'red')
lines(prior, prior)

类不平衡不会压倒后验概率,我已经尝试过将红色向右移动更小。一个微小的偏移会导致一个非常接近对角线的图,但它仍然会弯曲一点。

在此处输入图像描述

我将尝试解释为什么我认为检测类不平衡问题可能很困难,因为当我们确实遇到问题时数据很少。

考虑一个单变量正态模式识别任务,负例与正例的比率为 19:1(因此将所有内容分类为负例的准确度为 95%),但可以绘制决策边界,准确度高于 95%。理想的分布和决策边界如下图所示:

在此处输入图像描述

理想分类器的泛化性能如下:

  • TPR = 0.318385
  • FNR = 0.681615
  • TNR = 0.993286
  • FPR = 0.006714
  • 错误率 = 0.040459
  • ACC = 0.959541

其中TPR是真阳性率,FNR是假阴性率,TNR是真阴性率,FPR是假阳性率,ERR是错误率,ACC = 1 - ERR是准确率。

假设两个类的方差都是已知的,所以我们只需要估计类均值。不幸的是,如果我们必须仅从一小部分数据样本中估计均值,我们可能会很不走运,最终得到一个决策边界远离高数据密度区域的模型,我们不妨将所有内容归类为属于多数否定类。这是类不平衡问题的一个例子,因为估计参数的不确定性会导致对少数正类的偏差。这里我们有一个包含 152 个负模式和 8 个正模式的模型:

在此处输入图像描述

我不必努力工作会倒霉,这只是我尝试的随机数生成器的第 21 个种子。训练集统计数据为:

  • TPR = 0.00
  • FNR = 1.00
  • TNR = 1.00
  • FPR = 0.00
  • 错误率 = 0.05
  • 加速度 = 0.95

显然这不是很好,它并不比将所有内容都归类为负面更好。

所以让我们看看我们是否可以通过验证集来检测这个问题,同样有 152 个负例和 8 个正例,与训练集的比例相同:

  • TPR = 0.00
  • FNR = 1.00
  • TNR = 1.00
  • FPR = 0.00
  • 错误率 = 0.05
  • 加速度 = 0.95

哦,天哪,验证集表明这是不可能进行有意义分类的情况。但是,我们知道在这种情况下并非如此,通过构造。问题是,和训练集一样,它只是一小部分数据,我们刚刚又倒霉了。如果我们要采样更多的验证数据,我们可能会得到不同的结果。但是,如果我们可以收集更多数据,我们将使用它来训练模型,我们将获得更好的参数估计,并且类不平衡问题可能会消失。

所以我最初的想法是看看我们是否可以做一个贝叶斯检验,考虑到我们实际拥有的训练数据,是否有可能做出一个重要的决定。如果我们选择不正确的平坦先验,我们的类均值的后验分布是高斯分布,以样本均值为中心,标准差由均值的标准误差给出(与频率论者置信区间一致)。然后我们可以执行蒙特卡洛模拟,比如 2^20 个样本(因为在这种情况下可以很便宜地收集它们,我喜欢整数),并估计决策边界的后验分布。

在此处输入图像描述

2^20 个样本中大约 79% 的阈值位于数据密度高的区域,其余 21% 位于两个类别的右侧,基本上所有模式都将被归类为负数。我们还可以查看真阳性率的后验分布:

在此处输入图像描述

这表明存在一些有意义的分类的机会。让我们设定一个任意阈值,在该阈值下,我们可以认为真正的阳性率在 0.05 时是“有意义的”。TPR >= 0.05 的 Monte Carlo 样本的比例约为 22.7%,因此在这种情况下,我们可以诊断出类不平衡问题的合理性。

但是,如果我们再试一次会发生什么,但这次是针对将所有内容分类为负数或多或少是最优的问题:

在此处输入图像描述

其中最优模型的泛化性能总结为:

  • TPR = 0.007254
  • FNR = 0.992746
  • TNR = 0.999714
  • FPR = 0.000286
  • 错误率 = 0.049909
  • 加速度 = 0.950091

再次,我们必须从一个包含 152 个负例和 8 个正例的小数据集中估计类均值,但我们还是很不幸,

在此处输入图像描述

训练集性能由下式给出:

  • TPR = 0.25
  • FNR = 0.75
  • TNR = 1.00
  • FPR = 0.00
  • 错误率 = 0.0375
  • 加速度 = 0.9625

和验证集的性能

  • TPR = 0.125
  • FNR = 0.875
  • TNR = 1.000
  • FPR = 0.000
  • 错误率 = 0.04375
  • 加速度 = 0.95625

在这种情况下,蒙特卡洛模拟非常确信有意义的分类是合理的

在此处输入图像描述

给出 TPR >= 0.05 的 Monte Carlo 样本的比例约为 74.5%,当然,当我们通过构造知道最优模型将所有模式分配给负类时。

这表明贝叶斯分析可以表明有意义的分类是合理的,即使我们有一个表面上将所有模式分类为负类的分类器。在这种情况下,我们可能想考虑做点什么来缓解这个问题。但是,这样的测试无法告诉我们何时应该将所有内容归类为阴性。

无论如何,这就是我所希望的答案,但我更喜欢在实践中真正有效的东西!;o)如果有人能提供比这更好的东西,我很可能会提供第二次赏金。

好吧,我认为缺乏一个答案来解释如何检测类不平衡是否是特定应用程序中的一个问题,即使提供了 +50 声誉的适度赏金,这表明有理由担心关于类不平衡主题的研究. 我怀疑从业者经常重新平衡或重新加权数据集仅仅是因为它们不平衡,而不是因为不平衡实际上导致了问题。我进一步怀疑,过度补偿(例如,通过完全平衡数据集)通常只会使事情变得更糟。

当少数类别的两个示例足以充分表征其统计分布时,类别不平衡可能会导致问题。当这种情况发生时,决策边界确实倾向于过度偏向多数群体。但是,当您添加更多数据时,问题就会消失。这应该不足为奇。如果你有足够大的神经网络,它将是一个通用逼近器,能够在输入和输出空间之间实现基本上任何(一对一或多对一)映射。如果使用适当的评分规则对其进行拟合,那么它将渐近地输出类别成员的真实后验概率。所以如果你有足够的数据,不管问题有多不平衡,一个足够复杂的模型都会学习到最优决策面。

我认为任何检测和处理类不平衡问题的方法都会非常棘手。本质上,如果存在偏差,您将需要对训练样本重新采样或重新加权,以补偿由于“不平衡”引起的偏差。精确平衡数据集可能会过度补偿并使准确性(或预期损失)更差而不是更好。问题是,如果你没有足够的数据来描述少数类,你要从哪里获取数据来选择最优的偏差程度?我怀疑最好的方法将是一些贝叶斯方案,如果模型是正确的,它可以确定合理的真阳性率(例如)可能是多少。

从本质上讲,我从经验中知道,在小数据设置中,类别不平衡导致估计问题,但我不相信我们可以做很多事情,因为我们没有足够的独立数据来调整补偿应用。我认为我们应该非常警惕上/下采样或重新加权,因为存在不平衡,如果我们这样做,我们需要能够确定它是否有效。这至少要求我们知道什么标准对我们的应用程序很重要,以及为什么它很重要。没有应用程序主要对真阳性率感兴趣,如果这是真的,我们只会将所有内容分配给阳性类,然后对完成最佳工作感到满意!;o)