我将尝试解释为什么我认为检测类不平衡问题可能很困难,因为当我们确实遇到问题时数据很少。
考虑一个单变量正态模式识别任务,负例与正例的比率为 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)如果有人能提供比这更好的东西,我很可能会提供第二次赏金。