如何进行班级平衡?

数据挖掘 机器学习 分类 阶级失衡 计分
2021-10-04 00:32:46

我正在使用一个非常不平衡的数据集1% 的正例)用于分类问题我知道班级平衡是这种情况下的重要一步。

我有两个问题:

  1. 考虑到我不想放 0/1 标签,而只是根据输出分数对记录进行排序(它始终是正类的校准概率),做类仍然是个好主意吗平衡还是考虑到所需的特定输出,它没有用?

    基本上,我不关心截止点,但我只是对记录进行排序,以便识别出阳性概率较高的记录。

  2. 考虑到阳性病例的比例真的很小,是否进行过度/不足采样更好?是否有任何经验法则来决定重采样的比例?

先感谢您!

3个回答

由于存在如此严重的不平衡和两个类别(似乎),您可以将其更多地视为异常值检测问题。您应该阅读该方向的模型和算法!

如果您继续使用传统分类,您需要平衡数据集,请考虑使用 SMOTE 等方法。

根据您的数据大小,我通常建议对多数类进行下采样,以避免产生“合成”案例,但 SMOTE 等高级方法基本上会为您处理这个决定。

你能详细说明你的第一个问题是什么意思吗?分类算法需要 0/1 标签,因此输出分数不能按照您提到的方式排序。一些分类算法会给出概率分数而不是预测标签,所以如果这就是你的意思,我可以告诉你,不平衡仍然是一个问题。

参考以前的答案博客文章(我知道这不是那么相关,因为数据比你的更平衡),我认为你的第一种方法应该是不处理不平衡,如果你对结果感到满意,无需努力寻求平衡的解决方案。

与许多 ML 主题一样,最好的方法是尝试,我建议您将博客文章中的实验适应您的数据。

但是,对您的问题的更具体的答案:

  1. 我认为平衡通常会弄乱你的分类器在训练数据上的校准,所以如果你需要校准预测,我会提倡不使用平衡。如果你不关心校准,平衡也不错。
  2. 根据我的经验,欠采样比过采样要好。欠采样或过采样的量可以是要调整的超参数。

一些 Python Sklearn 模型有这个选项:class_weight="balanced"。通过这种方式,您可以向算法指定您的数据是不平衡的,并且它会自行进行更改。您可以在几个模型上尝试此操作,与在同一问题中使用下采样多数类技术相比,我使用此选项获得了更好的结果