二值分类中类不平衡的处理

2024-09-28 22:49:49 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我的问题的简要描述:

  1. 我在做一个有监督的学习任务来训练一个二元分类器。
  2. 我有一个大类不平衡分布的数据集:8个负实例,每个正实例。
  3. 我使用f-measure,即特异性和敏感性之间的调和平均值,来评估分类器的性能。

我绘制了几个分类器的ROC图,并且都显示了一个很大的AUC,这意味着分类是好的。然而,当我测试分类器并计算f-测度时,得到的值非常低。我知道这个问题是由数据集的类偏斜引起的,到目前为止,我发现了两种解决方法:

  1. 通过为数据集的实例分配权重,采用对成本敏感的方法(请参阅post
  2. 阈值化分类器返回的预测概率,以减少误报和漏报的数量。

我选择了第一个选项,这解决了我的问题(f-measure是令人满意的)。但是,现在,我的问题是:哪种方法更可取?有什么不同?

p.S:我在scikit学习库中使用Python。


Tags: 数据实例方法分类器绘制分类性能测度
1条回答
网友
1楼 · 发布于 2024-09-28 22:49:49

加权(代价敏感)和阈值都是代价敏感学习的有效形式。简单地说,你可以把这两件事想成:

加权

本质上,有一种说法是,错误分类稀有类的“代价”比错误分类普通类的代价更大。这是在算法级应用于支持向量机、人工神经网络和随机森林等算法。这里的局限性在于算法是否能够处理权重。此外,这方面的许多应用正试图解决更严重的错误分类(例如,将胰腺癌患者归类为非癌症患者)的想法。在这种情况下,即使在不平衡的设置中,也要知道为什么要对特定类进行分类。理想情况下,您希望像优化任何其他模型参数一样优化成本参数。

阈值化

如果算法返回概率(或某些其他分数),则在建立模型后可以应用阈值。实际上,您将分类阈值从50-50更改为适当的权衡级别。这通常可以通过生成评估度量曲线(例如F-measure)来优化。这里的限制是你在做绝对的权衡。对截止线的任何修改都会反过来降低预测其他类的精度。如果你的大多数普通类都有极高的概率(例如,大多数超过0.85),那么你更有可能使用这种方法获得成功。它也与算法无关(前提是算法返回概率)。

抽样

采样是另一种常见的应用于不平衡数据集的方法,可以给类分布带来一些平衡。基本上有两种基本方法。

采样不足

提取较小的多数实例集并保留少数实例。这将导致更小的数据集,其中类之间的分布更紧密;但是,您已经丢弃了可能有价值的数据。如果您有大量的数据,这也可能是有益的。

过采样

通过复制少数实例来增加少数实例的数量。这将导致更大的数据集,保留所有原始数据,但可能会引入偏差。但是,随着大小的增加,可能也会开始影响计算性能。

高级方法

还有一些更“复杂”的方法来帮助解决潜在的偏见。这些方法包括SMOTESMOTEBoostEasyEnsemble等方法,如本prior question中关于不平衡数据集和CSL的引用。

模型建立

关于使用不平衡数据构建模型的另一个注意事项是,您应该记住您的模型度量。例如,F-measures之类的度量没有考虑真实的负速率。因此,通常建议在不平衡设置中使用诸如Cohen’s kappa metric之类的度量。

相关问题 更多 >