极端类别不平衡数据下的分类问题

问题来源:
当一个分类任务的数据集中来自不同类别的样本数目相差悬殊时,我们通常称该数据集为“类别不平衡”的。以一个现实任务为例:在点击率预估(click-through rate prediction)任务中,每条展示给用户的广告都产生一条新样本,而用户最终是否点击了这条广告决定了样本的标签。显然,只有很少一部分的用户会去点击网页里的嵌入广告,这就导致最终得到的训练数据集中正/负例样本的数量差距悬殊。同样的情况也发生在很多实际应用场景中,如金融欺诈检测(正常/欺诈),医疗辅助诊断(正常/患病),网络入侵检测(正常连接/攻击连接)等等。 需要注意的是,尽管少数类的样本个数更少,表示的质量也更差,但其通常会携带更重要的信息,因此一般我们更关注模型正确分类少数类样本的能力。
评判指标的选择
在这里插入图片描述
可以用于不平衡的指标有:F-score,G-mean,AUC-PRC
不适合:AUCROC
AOCROC:

数据类别不平衡的根源
通常情况下,类别不平衡程度越高,数据集的分类难度越大。但在一些工作中,发现存在某些高度不平衡的数据集,在这些数据集上不加任何修改的标准学习模型(如,SVM,Decision Tree等)仍能得到很好的分类结果。显然,类别不平衡本身并不是分类困难的来源,其背后的原因需要对数据分布以及模型在训练过程中的行为进行更细致的观察。
一些研究工作尝试说明不平衡数据集上分类困难的本质原因,这些工作认为分类困难的原因来自于数据分布中的一些本质因素。如,

  • 过多的少数类样本出现在多数类样本密集的区域
  • 类别之间的分布严重重叠(即不同类别的样本相对密集地出现在特征空间的同一区域)
  • 数据中本身存在的噪声,尤其是少数类的噪声
  • 少数类分布的稀疏性(sparsity)以及稀疏性导致的拆分多个子概念(sub-concepts,可理解为子clusters)并且每个子概念仅含有较少的样本数量
    在这里插入图片描述
    最后在图1中我们给出一个直观的可视化来帮助理解类别不平衡比/类别分布重叠之间的关系:即使不平衡比相同,类别重叠/不重叠的数据集也会表现出极其不同的分类难度。深蓝色的点代表它们可以被模型很好地分类,而深红色的样本点代表模型完全无法正确分类这些数据点。

在图1(a)中,数据集是用两个不重叠的的二维高斯分布生成的。我们可以观察到不平衡比的增长并不会影响分类该数据集的难度(图1©)。而在图1(b)中,数据集由两个相互重叠的二维高斯混合分布生成。随着不平衡比的增加,它从一个相对简单的分类任务变成了一个极其困难的任务(图1(d))。

解决不平衡学习方法

  • 数据级
  1. 从多数类别中删除样本的方法(欠采样,如RUS、NearMiss[11]、ENN[12]、Tomeklink[13]等)
  2. 为少数类别生成新样本的方法(过采样,如SMOTE[14],ADASYN[15],Borderline-SMOTE[16]等)
  3. 结合上述两种方案的混合类方法(过采样+欠采样去噪,如SMOTE+ENN[17]等)
    Strength:
  4. 该类方法能够去除噪声/平衡类别分布:在重采样后的数据集上训练可以提高某些分类器的分类性能。
  5. 欠采样方法减小数据集规模:欠采样方法会去除一些多数类样本,从而可能降低模型训练时的计算开销。

Weakness:
6. 采样过程计算效率低下:这一系列的“高级”重采样方法通常使用基于距离的邻域关系(通常是k-最近邻方法)来提取数据分布信息。该方式的缺点是需要计算每个数据样本之间的距离,而计算距离需要的计算量随着数据集的大小呈平方级增长,因此在大规模数据集上应用这些方法可能会带来极低的计算效率。
7. 易被噪声影响:此外在具有高不平衡比且包含大量噪声的工业数据集中,少数类的结构可能并不能被样本的分布很好地表示。而被这些重采样方法用来提取分布信息的最近邻算法很容易被噪声干扰,因此可能无法得到准确的分布信息,从而导致不合理的重采样策略。
8. 过采样方法生成过多数据:当应用于大规模且高度不平衡的数据集时,过采样类的方法可能会生成大量的少数类样本以平衡数据集。这会进一步增大训练集的样本数量,增大计算开销,减慢训练速度,并可能导致过拟合。
9. 不适用于无法计算距离的复杂数据集:最重要的一点是这些重采样方法依赖于明确定义的距离度量,使得它们在某些数据集上不可用。在实际应用中,工业数据集经常会含有类别特征(即不分布在连续空间上的特征,如用户ID)或者缺失值,此外不同特征的取值范围可能会有巨大的差别。在这些数据集上定义合理的距离度量十分困难。

  • 算法级
    算法级方法专注于修改现有的标准机器学习算法以修正他们对多数类的偏好。在这类方法中最流行的分支是代价敏感学习[18,19](cost-sensitive learning),我们在此也只讨论该类算法。代价敏感学习给少数类样本分配较高的误分类代价,而给多数类样本分配较小的误分类代价。通过这种方式代价敏感学习在学习器的训练过程中人为提高了少数类别样本的重要性,以此减轻分类器对多数类的偏好。
    Strength:
  1. 不增加训练复杂度:使用该类算法魔改后的算法通常会有更好的表现,并且没有增加训练的计算复杂度。
  2. 可直接用于多分类问题:该类算法通常只修改误分类代价,因此可直接扩展到多分类问题上。

Weakness:
12. 需要领域先验知识:必须注意的是,代价敏感学习中的代价矩阵(cost matrix)需要由领域专家根据任务的先验知识提供,这在许多现实问题中显然是不可用的。因此在实际应用时代价矩阵通常被直接设置为归一化的不同类别样本数量比。由于缺乏领域知识的指导,这种擅自设置的代价矩阵并不能保证得到最优的分类性能。
13. 不能泛化到不同任务:对于特定问题设计的代价矩阵只能用于该特定任务,在其他任务上使用时并不能保证良好的性能表现。
14. 依赖于特定分类器:另一方面,对于诸如神经网络的需要以批次训练(mini-batch training)方法训练的模型,少数类样本仅仅存在于在很少的批次中,而大部分批次中只含有多数类样本,这会给神经网络训练带来灾难性的后果:使用梯度下降更新的非凸优化过程会很快陷入局部极值点/鞍点(梯度为0),导致网络无法进行有效学习。使用敏感代价学习来给样本加权并不能解决这个问题。

  • 集成方法
    集成学习类方法专注于将一种数据级或算法级方法与集成学习相结合,以获得强大的集成分类器。由于其在类别不平衡任务中表现出色,在实际应用中集成学习越来越受欢迎。它们中的大多数基于某种特定的集成学习算法(例如,Adaptive Boosting [20])并在集成的过程中嵌入一种其他的不平衡学习方法(例如,SMOTE)。
    Strength:
  1. 效果通常较好:没有什么问题是ensemble不能解决的,如果有,再多加一个base learner。根据我的经验集成学习方法(魔改的)仍然是解决不平衡学习问题最有效的方法。
  2. 可使用迭代过程中的反馈进行动态调整:极少数的集成方法具有了动态重采样的思想,如BalanceCascade会在每轮迭代中丢弃那些已经被当前分类器很好地分类的多数类样本(assumption是这些样本已经不含对模型有贡献的信息)。该方法在实际应用时也实现了相比于其他降采样方法更快的收敛速度,使其可以使用相对较少的分类器来得到更优的分类表现。

Weakness:
17. 包含所使用的不平衡学习方法的缺点:由于大多数不平衡集成学习方法仍然在其pipeline中使用了标准的数据级/算法级方法,因此上述两类方法的缺点也同样存在于使用他们的集成方法中。
18. 过采样+集成进一步增大计算开销:当应用于实际任务时,即便集成能够提升大部分方法的分类表现,这些数据级/算法级方法仍然存在计算效率低,适用性差并且易被噪声影响的缺点。例如,作为过采样方法的SMOTE在单独使用时已经引入了大量的新训练样本,使用SMOTE生成更多的训练数据集并训练更多的分类器只会使整个训练过程变得更慢。
19. 对噪声不鲁棒:BalanceCascade做出了非常有意义的探索,但其一味保留难以分类样本的策略可能导致在后期的迭代中过度拟合噪声/离群点,并最终恶化集成分类器的表现。换言之,其对噪声不鲁棒。

总结:

总而言之,要根据问题性质的不同选择不同的方法,梳理一下

欠采样:一般是用来平衡数据集、去噪。平衡数据集的有随机欠采样/NearMiss,采样和训练速度都很快。随机欠采样在任何情况下都能用,但在数据集不平衡程度较高时会不可避免地丢弃大部分多数类样本造成信息损失。NearMiss对噪声极端敏感,有噪声基本就废掉。去噪方法有很多,如Tomeklink,AllKNN等,需要数据集上有良好定义的距离度量,在大规模数据集上计算量大。去噪之后对有的分类器有效,有的无效。
过采样:随机过采样任何情况下都不要用,及其容易造成过拟合。SMOTE、ADASYN在小规模数据上可以一试。当数据规模大且不平衡程度高时,过采样方法生成巨量的合成样本,需要很多额外计算资源。同时此类过采样基于少数类样本的结构信息,在少数类的表示质量很差时甚至会反向优化:过采样效果还不如直接训练。
混合采样:理论上加入了去噪类的欠采样算法来清洁过采样之后的数据集。实际使用起来我没感觉到有什么不同,唯一的区别是加了去噪方法之后更慢了。
Cost-sensitive:在数据集不平衡程度不高时可用,训练分类器的效率跟使用原始数据训练没有什么区别。缺点是一般需要自己当“领域专家”来设置cost matrix(多了个参数要调),设的不好通常也会得到不理想的效果。此外在不平衡严重的时候,由于没有对数据集的修改,神经网络的训练会crash:连续数个mini-batch都是多数类样本,分分钟陷到local optimal/鞍点。
集成:随机降采样+集成,在不平衡比较高时需要较多的基学习器来达到较好的效果。注意Boosting容易被噪声影响,Bagging方法是真正的万金油,增加基学习器数量效果一般不会下降。高级降采样+集成,也可以尝试,运行会慢并且效果不能保证比随机方法好。高级过采样+集成,同上,数据规模大且不平衡程度高情况下,训练样本数量爆炸。尤其是集成方法还要训练好多个基学习器。BalanceCascade,信息利用效率高,只用很少的基学习器就能达到较好的效果,但对噪声不鲁棒。
转载:https://zhuanlan.zhihu.com/p/66373943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值