量化数据集的不平衡性

数据挖掘 数据集 不平衡学习
2022-03-16 15:45:41

在查阅了很多文献之后,确实有很多如何使用不平衡数据集,但到目前为止我找不到

不平衡度量的定义,用于量化数据集 A 与数据集 B 相比的不平衡程度。

我什至尝试自己定义一个这样的指标,但我无法用一个指标捕获以下两种情况:

  1. 一类具有所有测量值
  2. 测量值更加平衡,但一两个类别的测量值非常低甚至为零。

您能否从文献中向我提供更多信息,这些信息可能是我无法找到的,或者至少尝试讨论不平衡的定义问题。

非常感谢亚历克斯

1个回答

我认为“平衡”在不同的上下文中可能有不同的含义,但通常“平衡”数据集是其中类标签均匀分布的数据集。当然,“不平衡”数据集是类别标签分布不均匀的数据集。

我不知道文献中关于平衡指标的讨论。一种直接的选择是测量类标签的实际分布与类标签上的均匀分布之间的KL 散度。KL 散度为零表示数据集完美平衡。由于实际分布与完美平衡分布不同,KL 散度将增长到无穷大。该指标将允许您比较两个数据集之间的不平衡程度。

不幸的是,KL-divergence 非常脆弱。当其中一个类的示例为零时,它在技术上是未定义的。在实践中,您可以将此类数据集视为无限不平衡。这就是scipy.stats.entropy所做的。

然而,这种治疗有一个不希望的副作用。任何类别的示例为零的数据集都会获得相同的“不平衡分数”(无穷大)。这不符合我们对不平衡的直觉。假设我们有两个数据集,其中包含来自“狗”、“猫”和“马”类的示例。假设数据集 A 有 19 只狗、1 只猫和 0 匹马。数据集 B 有 10 只狗、10 只猫和 0 匹马。理想情况下,我们的指标会说数据集 A 比数据集 B 更不平衡,但 KL 散度将为两个数据集给出相同的结果。

我们可以通过在计算 KL 散度之前向每个类分布添加一个微小的 epsilon 来纠正这个问题。这既解决了当一个类有零示例时未定义的问题,也纠正了上述两个不同数据集获得相同不平衡分数的情况。