过采样、欠采样和 SMOTE 解决了什么问题?

机器算法验证 机器学习 分类 预测模型 不平衡类
2022-01-20 01:14:20

在最近一个广受好评的问题中,蒂姆问什么时候不平衡数据真的是机器学习中的一个问题问题的前提是有很多机器学习文献讨论类平衡不平衡类的问题这个想法是,正负类之间不平衡的数据集会导致某些机器学习分类(我在这里包括概率模型)算法出现问题,并且应该寻求方法来“平衡”数据集,恢复完美的 50/50分为正类和负类。

赞成的答案的一般意义是“它不是,至少如果你在你的建模中深思熟虑的话”。M. Henry L. 在对已接受答案的赞成评论中指出

[...] 使用不平衡数据并没有什么低级问题。以我的经验,“避免不平衡数据”的建议要么是特定于算法的,要么是继承的智慧。我同意 AdamO 的观点,一般来说,不平衡的数据不会对指定良好的模型造成概念上的问题。

AdamO 认为阶级平衡的“问题”确实是阶级罕见的问题之一

因此,至少在回归中(但我怀疑在所有情况下),数据不平衡的唯一问题是您实际上拥有的样本量很小。如果任何方法适合稀有类的人数,如果他们的比例成员不平衡,应该没有问题。

如果这是手头的真正问题,那么它留下了一个悬而未决的问题:旨在平衡数据集的所有重采样方法的目的是什么:过采样、欠采样、SMOTE 等? 显然,它们并没有解决隐含样本量小的问题,您不能无中生有地创建信息!

4个回答

这些方法试图解决的问题是增加少数类对成本函数的影响。这是因为算法试图很好地拟合整个数据集,然后适应大多数。其他方法是使用类权重,这种方法在大多数情况下会产生更好的结果,因为不会因欠采样或性能损失而丢失信息,也不会因过采样而引入噪声。

一些抽样技术是为了调整偏差(如果人口率已知且不同),但我同意不平衡类本身不是问题的观点。一个主要原因归结为处理性能。例如,如果我们的目标类是 1:100000 的极端罕见情况,那么我们的建模数据集将非常庞大并且计算将很困难。无论采用何种策略,采样总是会丢弃一些数据以减少总数据集的大小。我认为所有不同采样策略之间的区别只是我们在不牺牲预测可能性损失的情况下丢弃哪些数据的聪明之处。

有许多过采样和欠采样技术可以克服不平衡数据中少数人的稀疏性,反之亦然……但是它们中的大多数都会对模型的行为产生影响(粗略地说方差)。我个人使用一种自行设计的技术,其中过采样和欠采样同时进行。将这种组合采样与自适应合成采样 (ADASYN) 相结合,我将其称为C-ADASYN您可能会想到毛发移植,在稀疏区域过度采样,在密集区域不采样,以保持行为公平,并在需要时添加合成样本以增加人口。

在此处输入图像描述

我给你举一个更极端的例子。考虑这样一种情况,您有一个数据集,其中 99 个数据点标记为正数,只有一个数据点标记为负数。在训练过程中,你的模型会意识到,如果它把所有东西都归类为积极的,它最终会侥幸逃脱。解决此问题的一种方法是对代表性不足的类进行过采样,另一种是对代表性不足的类进行过采样。例如,在一个包含 70 个正标签和 30 个负标签的数据集中,我可能会对带有替换的负标签和没有替换的正标签进行采样,这将导致我的模型在训练期间遇到更多的负标签。这样,如果我的模型试图将所有内容都归类为正数,则会产生比其他情况更大的损失。

另一种与抽样无关的方法是调整成本函数,以赋予具有少数标签的数据点更高的权重。例如,如果您在数据集中使用 NLL 损失,其中 1 与标签中的 0 相比过度表示,您可以将损失函数调整为:

L(xi~,yi)=α(yi)ln(xi~)β(1yi)ln(1xi~)

其中差异 的大小取决于过度代表/代表不足的程度。β>αβα