如何解决训练样本中的类不平衡问题?

数据挖掘 训练 阶级失衡
2021-09-24 14:57:31

我最近在一次工作面试中被问及解决训练数据集中类不平衡的解决方案。让我们关注一个二元分类案例。

我提供了两种解决方案:通过向分类器提供平衡的数据批次来对少数类进行过采样,或者对丰富类进行分区,例如用平衡的训练集训练许多分类器,丰富的唯一子集和少数的相同集。面试官点了点头,但我后来被打断了,他们提到的知识差距之一就是这个答案。我现在知道我本可以讨论更改指标..

但是现在我脑海中浮现的问题是:如果测试集的比例相同,那么训练一个 80% A 类的分类器真的有问题吗?机器学习的经验法则似乎是训练集需要与测试尽可能相似,以获得最佳预测性能。

不只是在不知道(没有先验)我们需要平衡类的测试分布的情况下吗?也许我应该在采访中提出这一点。

2个回答

其实他们说的都是对的。过采样的想法是正确的,并且通常是解决此类问题的重采样方法之一。可以通过对少数群体进行过采样或对多数群体进行欠采样来进行重采样。您可能会将SMOTE算法视为一种完善的重采样方法。

但是关于您的主要问题:不,这不仅与测试集和训练集之间分布的一致性有关。它有点多。

正如您提到的指标,想象一下准确度得分。如果我有 2 个类别的二元分类问题,一个占总体的 90%,另一个占 10%,那么不需要机器学习,我可以说我的预测始终是多数类别,并且我有 90% 的准确度!因此,无论训练测试分布之间的一致性如何,它都不起作用。在这种情况下,您可能会更加关注 Precision 和 Recall。通常,您希望有一个分类器来最小化 Precision 和 Recall 的平均值(通常是调和平均值),即错误率是 FP 和 FN 相当小且彼此接近的地方。

使用调和平均值而不是算术平均值,因为它支持这些误差尽可能相等的条件。例如,如果精度是1和召回是0算术平均值是0.5这并没有说明结果中的现实。但调和平均是0 然而,其中一个指标很好,另一个指标非常糟糕,所以总的来说结果并不好。

但是在实践中有些情况你不想保持误差相等。为什么?请参见下面的示例:

附加点

这不完全是关于您的问题,但可能有助于理解。

在此处输入图像描述

在实践中,您可能会牺牲一个错误来优化另一个错误。例如,艾滋病毒的诊断可能是一个案例(我只是模拟一个例子)。这是高度不平衡的分类,因为当然,没有艾滋病毒的人数大大高于携带艾滋病毒的人数。现在让我们看看错误:

假阳性:人没有感染 HIV,但测试表明他们感染了。

假阴性:人确实感染了艾滋病毒,但测试表明他们没有。

如果我们假设错误地告诉某人他感染了 HIV只会导致另一个测试,我们可能会非常注意不要错误地说某人他不是携带者,因为这可能会导致病毒传播。在这里,您的算法应该对 False Negative 敏感,并且比 False Positive 惩罚它更多,即根据上图,您最终可能会得到更高的 False Positive 率。

当您想用摄像头自动识别人脸以让他们进入超安全站点时,也会发生同样的情况。您不介意没有为获得许可的人打开一次门(假阴性),但我确定您不想让陌生人进入!(假阳性)

希望它有所帮助。

对于您的问题“如果测试集具有相同的比例,那么训练具有 80% A 类的分类器真的有问题吗?”,答案是“这取决于错误分类的成本”,但通常这肯定是一个问题,因为您的分类器将偏向于将个人分类到过度代表的类别中,而不管其特征的值如何,因为平均而言,这样做会增加训练期间正确分类的机会。

有不同的过采样和欠采样策略也许最流行的一种是SMOTE(Synthetic Minority Over-sampling Technique),它基于 k-最近邻创建合成训练数据。