为什么我们需要处理数据不平衡?

数据挖掘 分类 数据集 采样 阶级失衡
2021-09-21 02:32:21

我想知道为什么我们需要处理数据不平衡。我知道如何处理它以及解决问题的不同方法 - 通过上采样或下采样或使用 SMOTE。

例如,如果我有百分之一的罕见疾病,假设我决定为我的训练集设置一个平衡的数据集:50/50 样本不会让机器认为 50% 的患者会有病吗?即使比率是 1 of 100。所以

  1. 为什么我们需要处理数据不平衡?
  2. 设置平衡的推荐比例是多少?
2个回答

当找到少数类的价值远高于找到多数的价值时,您需要处理不平衡的数据集。

假设 1% 的人口患有这种罕见疾病。假设您将相同的成本分配给说一个健康的人生病或说一个生病的人是健康的。提供一个模型,说每个人都很健康,获得 99% 的准确率并早点回家。这种模型的问题在于,尽管它具有很高的准确性,但它可能不是您想要的。大多数时候,您希望找到患有这种疾病的人(对假阴性给予高权重),而不是害怕将健康人送去进行不必要的测试(对假阳性给予低权重)。在现实世界的健康问题中,体重之间的比率很容易达到 1 到 1,000。

分布的不平衡使大多数算法无法找到合适的解决方案。

您是正确的,仅平衡分布并不是最佳解决方案。事实上,在平衡分布上训练的算法并不适合将要评估的自然分布。我最喜欢的方法是对其进行调整,如您在此处所见有关讨论,请参见此处

仅将比率设置为其他问题是行不通的,因为您将遇到同样的问题。

Smote以不同的方式工作,当我尝试它时效果不佳,但它可能适合您的问题。

  • 简短的回答:

如果/因为它使您的模型更好(在看不见的数据上),您需要处理类不平衡。“更好”是你必须定义自己的东西。可能是准确性,可能是成本,可能是真实阳性率等。

  • 长答案:

在谈论阶级不平衡时,有一个微妙的细微差别很重要。也就是说,您的数据是否不平衡,因为:

  1. 数据的分布本身就是不平衡的

在某些情况下,一类比另一类发生得更多。而且没关系。在这种情况下,您必须查看某些错误是否比其他错误更昂贵。这是检测患者致命疾病、确定某人是否是恐怖分子等的典型示例。这可以追溯到简短的答案。如果某些错误比其他错误代价更高,您将希望通过给它们更高的成本来“惩罚”它们。因此,更好的模型将具有更低的成本。如果所有错误都一样糟糕,那么就没有真正的理由应该使用成本敏感模型。

同样重要的是要注意,使用成本敏感模型并不特定于不平衡的数据集。如果您的数据也完全平衡,您也可以使用此类模型。

  1. 它不代表数据的真实分布

有时您的数据是“不平衡的”,因为它不代表数据的真实分布。在这种情况下,您必须小心,因为一个类的示例“太多”而另一个类的示例“太少”,因此,您需要确保您的模型不会过度/欠拟合这些类。

这与使用成本不同,因为一个错误可能不会比另一个错误更糟。如果看不见的数据与您训练的数据的分布不同,您会产生偏见,并且对您的模型没有好处。

假设我给你训练数据,你的目标是猜测某物是红色还是蓝色。无论您将蓝色误认为红色还是红色误认为蓝色,都没有太大区别。您的训练数据有 90% 的红色实例,而在现实生活中,它们只发生 10% 的时间。你需要处理这个问题才能使你的模型更好。