使用 SMOTE 处理不平衡数据 - 没有太大区别?

机器算法验证 机器学习 分类 数据挖掘 数据集 不平衡类
2022-03-04 10:48:48

我有 2 个类的分类问题。我有近 5000 个样本,每个样本都表示为具有 570 个特征的向量。正类样本接近 600 个。意思是,我在数据集中有 1:8 的正负样本比例。使用SMOTE可以减轻数据集中的这种不平衡随后,进行 10 倍 CV 的分类。我得到 0.91 的 f 值。

为了研究数据集中不平衡的影响,我尝试使用本身不平衡的数据(即没有 SMOTE)。这一次,我观察到 f 测量值为 0.92。我知道区别在于使用准确性和 f-measure来解释分类器预测,并且由于我有一个不平衡的数据集,所以我选择使用 f-measure。

在我的情况下,无论我的数据集是否存在不平衡,最终结果似乎都没有太大差异。在这种情况下,我有以下问题:

  • 为什么在这两种情况下 f 度量似乎没有太大差异?
  • 可以注意到,在我使用 SMOTE 缓解不平衡后,数据集变得平衡,我仍然使用 f-measure 来评估分类结果。在这种情况下使用 f-measure 是否正确还是应该使用accuracy
  • SMOTE 对少数类进行过采样。同样,对多数类进行下采样(或欠采样)也可以纠正这种不平衡。为什么这种方法不是首选(如果我可以这么说)?与过采样相比,欠采样对经过训练的分类器和准确性有什么影响。
3个回答

我还想提请您注意,在原始 SMOTE 论文中,良好的结果是基于 SMOTE 和随机欠采样的结合。这是因为应用 SMOTE 来实现与多数类的平等平衡并不一定是分类器的最佳情况,正如您的结果所示。因此,您可能会对原始多数类别的不同百分比的多数进行欠采样,然后(例如 25%、50%、75%)将 SMOTE 应用于具有不同数量的合成生成样本(例如 2、3、4 )。您最终会得到一组案例,您可以选择显示更好的交叉验证结果的案例。

SMOTE 并不是真的要改变 f-measure 或准确度……它是关于准确率与召回率之间的权衡。

通过使用 SMOTE,您可以以精度为代价提高召回率,如果这是您想要的。只需查看 SMOTE 论文中关于 SMOTE 如何影响分类器性能的图 2。

对少数类进行欠采样会得到更少的数据,并且大多数分类器的性能会因数据更少而受到影响。

如果您的分类器允许,另一种方法是重新加权数据,为少数类赋予更高的权重,为多数类赋予更低的权重。

那么为什么要使用 SMOTE 之类的东西呢?通常,如果您感兴趣的课程很少见,例如在预测信用评分时发现默认值,则给出 0-1 分数的分类器会说每个人都没有默认值。通常在实践中,人们宁愿有一个返回绝大多数默认值的分类器,即使精度低于 50%,因为这些可以由人工检查,或者您可以将更深入、更昂贵的数据收集工作用于这些案例。如果您使用具有更连续分数的分类器,您可以降低阈值以获得更多召回 - 即对于逻辑回归,开始将视为正数,但这通常会导致 f-measure 降低,因为它不是训练模型的“支点”。XTw>2

通过重新加权类的比例,您可以使您的模型在您喜欢的精度/召回率权衡下进行训练,这意味着您最终会比仅降低阈值略好一些。

假设您的类被拆分为 0:10,000 和 1:100。因此,即使您的模型错误地预测了所有 1,您的模型也将 99% 准确。这是一个准确预测 1 的好模型吗?没有。因此,SMOTE*。即使新模型的准确率是 96%

*适用于准确性和 f 测量