监督机器学习中的班级失衡


47

通常,这是一个问题,并不特定于任何方法或数据集。我们如何处理有监督机器学习中的类不平衡问题,其中数据集中0的数量约为90%,1的数量约为10%。我们如何最佳地训练分类器。

我遵循的方法之一是采样以使数据集平衡,然后训练分类器并对多个样本重复此操作。

我觉得这是随机的,有没有解决这些问题的框架。

Answers:


45

有许多框架和方法。这是一个经常性的问题。

例子:

  • 欠采样。选择一组零的子样本,以使其大小与一组零匹配。除非您使用更复杂的框架,否则显然会丢失信息(例如,我将第一个集合拆分为9个较小的,互斥的子集,在每个子集上训练一个模型,然后将这些模型合在一起)。
  • 过度采样。生产人造的,直到比例为50%/ 50%。我以前的雇主默认使用此功能。为此有很多框架(我认为SMOTE是最受欢迎的框架,但我更喜欢Noisy PCA之类的简单技巧)。
  • 一堂课学习。只需假设您的数据有几个真实点(一个)和大量实际上不存在的随机噪声就会泄漏到数据集中(任何不是一个噪声就是噪声)。使用算法对数据进行去噪,而不要使用分类算法。
  • 成本敏感的培训。使用非对称成本函数人为地平衡培训过程。

一些引人入胜的评论,按技术复杂性\详细程度的升序排列:

哦,顺便说一下,90%/ 10%并非不平衡。卡交易欺诈数据集通常被拆分为99.97%/ 0.03%。这是不平衡的。


刚刚注意到,我引用的Noisey PCA可以被视为过采样,正则化或抖动,具体取决于实现细节。
Lucas Gallindo 2015年

感谢Lucas的资源。帮助很大。我手头有一个特有的问题,我所有的样本都标记为``1''。但是实际上,这些样本的杂质极少,即有些记录实际上应该为“ 0”,但标记为“ 1”。我相信这类问题属于一类。我的理解正确吗?是否有用于识别它们的通用框架,最初我尝试集群化,但是没有用。
NG_21

1
所有这些算法都需要一些标记为零的数据和一些标记为100%的正确性的数据(或非常接近100%的数据)。您拥有所有这些,但您知道这些数据中的一小部分被贴错标签,情况有所不同。在不了解应用程序领域的情况下,我将使用“异常检测”对其进行攻击,然后将异常标记为零。然后尝试一些分类算法(也许是一类学习)。有了有关应用程序领域的知识,我将首先寻求领域专家的帮助。
卢卡斯·加林多

13

这在很大程度上取决于学习方法。大多数通用方法都有一种(或几种)方法来解决此问题。一个常见的解决方法是为少数群体分配更高的误分类惩罚,从而迫使分类器识别它们(SVM,逻辑回归,神经网络等)。

正如您提到的,更改采样也是一种可能。在这种情况下,与对多数类别进行欠采样相比,对少数类别进行过度采样通常是更好的解决方案。

某些方法(例如随机森林)不需要任何修改。


谢谢。您能否指出一些示例说明的任何资源。有没有一种方法可以在R / Python中实现,而无需从头开始对算法进行编码。
NG_21


7
为什么随机森林不需要任何修改?我觉得你还是可以分配类权重
MAC

4

通常,问题不是少数群体中案件的发生频率而是绝对数量。如果与特征的变化相比,目标没有足够的变化,则可能意味着算法无法非常准确地对事物进行分类。

一件事是,如果存在分类错误,可以在分类步骤而不是参数估计步骤中使用分类错误。一些方法没有参数的概念,它们只是产生完全的类标签或类概率。

当您拥有概率估计器时,您可以基于信息理论基础或结合业务价值做出分类决策。


1

添加两个技巧:1.使用CDF,计算训练数据中的频率或使用非常大的验证(如果您的测试集不会改变,但是验证集必须与训练集具有相同的分布),然后对预测进行排序并得到一个类别的前X%(您之前的频率),其他类别为其他/ 2.加权样本,模型将趋向于加权样本类别,您可以使用样本方差v。权重= 1/2(1-(vmax-vi)/ vmax)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.