采样-不均衡数据

不均衡数据的重采样

在实际应用中,我们拿到的数据往往是正负样本比不均衡的,如:医疗诊断、网络入侵检测、信用卡反诈骗、推荐系统推荐等。而许多算法在面对不均衡的样本时往往会出现问题。

比如,最简单的,如果正负样本比例达到1:99,那么分类器将所有的样本都划分为负样本时的正确率能够达到99%,然而这并不是我们想要的,我们想要的往往是模型在正负样本上都有一定的准确率和召回率。

那么,为什么很多分类模型面对均衡的样本时会出现各种问题?

本质原因是模型在训练时优化的目标与在测试时使用的评价标准不一致。这种不一致可能是由于训练数据的样本分布于测试数据的样本分布不一致,也可能是训练阶段不同类别的权重(重要性)和测试阶段不一致导致的。

因此一般可以从两个角度处理样本不均衡问题。

基于数据的方法

对样本进行重采样,使得原本不均衡的数据变得均衡。记样本数大的类别为 $C_{maj}$, 样本数小的类别为 $C_{min}$,对应的样本集合分别为 $S_{maj}$ 和 $S_{min}$, 则根据题设,有 $|S_{maj}|>>|S_{min}|$。

采样一般分为欠采样和过采样。最简单的处理不均衡数据的方法是随机采样。随机过采样是从少数类样本集 $S_{min}$ 中随机有放回的抽取样本从而得到更多的样本;随机欠采样是从多数类样本集中通过有放回或者无放回的方式抽取出少数的样本。

直接随机采样虽然可以消除样本集的不均衡问题,但是,也带来了一些别的问题。如:过采样对少数类样本集进行多次复制,扩大了数据规模,但同时也增加了模型训练的复杂度,还容易陷入过拟合。而欠采样从多数类中抽取出一部分样本,会丢失剩下的样本,可能会丢失一部分的重要信息,使得模型仅仅学习到整体模型的一部分,降低了准确性。

因此,在实际应用中,通常在过采样的过程中,不是简单地复制样本,而是通过一定的手段构造出新的样本。例如:SMOTE算法。

SMOTE算法在扩充样本集时,对少数类样本集 $S_{min}$ 中每个样本 $x$,从它近邻的 K 个样本中随机选择一个样本 $y$,然后在 $x,y$ 的连线上随机选取一点作为新的合成样本。从而降低过拟合的风险。

对于一个新的样本,有 $x_{new} = x+alpha (x-y)$。 但是SMOTE算法的目的是为每个少数类样本都合成相同数目的样本,这样可能增加类之间的重叠度,同时会产生一些冗余的数据。因而,后又有改进的算法,如:

Borderline-SMOTE、ADASYN 等改进算法。其中 Borderline-SMOTE,选择只给处在分类边界上的少数类样本合成新样本。

其主要思想为:对于少数类中的样本,如果一个少数类样本的近邻都是少数类样本,那么此样本对数据的分类的作用不大,而对于处于分类边界上的样本,由于其近邻可能是多数类样本也可能是少数类样本,因此为其生成新的样本有利于进一步的优化分类器。

ADASYN则是给不同的少数类样本合成不同个数的新样本。

此外还可以用数据清理的方法来进一步的降低合成样本带来的类间重叠,从而得到更加良定义的类簇,更好的训练模型。

而对于欠采样,可以采用 Informed Undersampling 的方法来解决随机欠采样带来的数据丢失问题。

如(1)Easy ensemble 方法:每次从多数类中随机抽取一个子集,然后利用少数类样本集+采样处的多数类子集来训练一个分类器;重复进行多次抽取,进行不同的训练,得到多个分类器,最终的分类结果就是多个分类结果的融合。

(2)Balance Cascade 方法:级联结构,在每一级中从多数类中随机抽取子集,用少数类样本集+抽取的子集训练该级别的分类器;然后将能够正确分类的样本剔除掉,继续下一级的操作,重复若干次得到级联结构,最后的分类结果也是各级分类器的融合。

基于算法的方法

在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的比重)来矫正这种不平衡性;当样本数目极其不均衡时,也可以将问题转化为单类学习、异常检测等。

原文地址:https://www.cnblogs.com/wzhao-cn/p/11309803.html