我可以对不平衡的数据集应用什么平衡方法?

机器算法验证 r 机器学习 分类 数据挖掘 不平衡类
2022-03-17 16:27:20

我正在尝试从 UCI 数据库存储库中解决一个分类问题。不幸的是(或幸运的是),我注意到我的数据集是不平衡的。根据学生达到的最终分数,我将数据分为 5 个类别,如下所示:

  • 如果学生获得 0 到 7 的分数 => 1 级 [FAIL(E)]
  • 如果学生获得 8 到 9 的分数 => 2 级 [SUFFICIENT(D)]
  • 如果学生获得 10 到 11 的分数 => 3 级 [GOOD(C)]
  • 如果学生获得 12 到 15 的分数 => 4 级 [NOTABLE(B)]
  • 如果学生获得 16 到 19 的分数 => 5 级 [OUTSTANDING(A)]

我的问题是,正如我所说,数据是不平衡的,所以我想平衡它。

我考虑过应用某种欠采样方法,但我的数据集只有 649 个实例,所以我认为删除其中的一些不是最好的主意。然后我考虑做一些过采样,以复制一些少数类的例子,然后让类平衡,但我仍然不确定这是否可行。

如果您能帮我解决这个问题,我将不胜感激。这是我第一次面临数据不平衡的真正问题。

3个回答

由于您使用的是 R,因此您可以使用一些复杂的方法,例如ROSESMOTE但是我不确定重新平衡您的数据集是否适合您的情况。

另一种方法可能是成本敏感的算法,例如不需要平衡数据的C5.0 。您还可以考虑将马尔可夫链应用于您的问题。

我认为在您的数据集中,主要挑战不是不平衡。数据集很小,由于类很少,您没有太多的样本可供其中任何一个使用。

通过使用一对多的概念(A 或非 A,B 或非 B),您可以获得每个概念的更多样本。您可以利用这些类是有序的(A > B > C > D > E)这一事实,并使用一个概念来聚合其中的一些(例如,B 及以上,D 及以下)。假设获得 D 或 E 的原因没有真正的区别,那么您不仅会获得更多样本,而且还会通过减少非常相似的概念之间的区别来获得收益。

至于为了应对不平衡而改变数据集,去吧。但是,您应该在原始发行版上进行验证。详情见: https ://datascience.stackexchange.com/questions/810/should-i-go-for-a-balanced-dataset-or-a-representative-dataset/8628#8628

您可以使用更好的技术来应对不平衡,而不是仅仅过度/不足采样。有关详细信息,请参阅: https ://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training-set/answer/Dan-Levin-2

从不平衡的数据中学习

如果您选择过采样,请务必创建训练测试拆分后进行。如果您使用交叉验证,则应在每个折叠内进行过采样。