1、何为不平衡样本?
样本不平衡是指分类任务中不同类别的训练样例数目差别很大的情况。在实际的分类任务中,我们经常会遇到类别不平衡,例如广告点击率预测、情感分类、异常检测等。而机器学习算法通常假设不同类别的样本数量大致相似,因此在假设与实际不符合的情况下,样本不平衡会导致学习算法效果大打折扣。在这种情况下,我们通常会对样本进行处理,不过也存在一些情况,样本不平衡对实验的影响不大:(a)当问题指标是ROC或者AUC等对样本不平衡不敏感的指标时;(b)正样本、负样本具有同等重要性的情况。其实有时候a、b是联动的,比如在实际业务场景中,我们更侧重模型的召回率,即更关心正样本的预测情况,此时,正负样本的重要性就不同了,那么就需要对不平衡样本进行处理了。
实际场景比较常见的样本不平衡的现象之一是长尾现象,即我们常说的“二八原理”。比如某些商品的购买量很小,但这类商品的销量基数很大(牛仔裤销量基数很大,但紧身牛仔裤销量很小)。

而在很多算法模型的应用都是基于某种分布,比较多的是基于多元正态分布,这就造成了实际分布不均匀的数据和算法的假设之间存在偏差的情况。同时,不平衡的样本对模型训练后的精度及相关的评价指标如召回率等也会造成影响。比如在分类任务中,不同类别的训练样本数据存在差异很大的情况,这时样本不均衡往往会造成模型对样本数比较多的类别过拟合,对比较少的类别欠拟合的现象,即总是将样本分到样本较多的分类类别中。
以下表为例:
则准确率accuracy=${9700+100\over9700+150+50+100}=0.98$。假如将所有的样本都预测为负样本,此时准确率accuracy=${9700+150\over9700+150+50+100}=0.985$,准确率进一步提升,但这样的模型显然是不能满足实际业务要求的,并且事实上模型已经对这个不平衡的样本过拟合了。再以吴恩达老师所举例子进行说明:医院根据肿瘤的直径等进行恶性肿瘤和良性肿瘤的划分,其中真实情况是100个肿瘤中有2个是恶性的,98个良性的。这种情况下,模型只要把所有肿瘤都判断为良性的,那就有高达98%的正确率了,但这样其实是不妥当的。那么,怎么解决这个问题呢?就是对过多的样本进行欠采样,对过少的样本进行过采样。
2、不平衡样本处理方法
2.1 处理方法
根据正负样本的不平衡情况,处理方法主要有欠采样、过采样以及两者的结合:
2.1.1 欠采样(下采样,downsampling):
1、 随机欠采样
例如,数据中有正样本50条,负样本950条,正样本占比5%。随机欠采样就是在负样本中随机选出10%即95例,与正样本组成新的训练集(95+50)。如此一来,正样本所占的比例为50/145=35%,比原来的5%有了很大增加。随机欠采样的优点是在平衡数据的同时减小了数据量,加速了训练;缺点是数据量的减少会影响模型特征学习能力和泛化能力。
2、Edited Nearest Neighbor (ENN)
思想是:遍历多数类别的样本,如果某个多数类别样本的大部分k近邻样本都跟他自己本身的类别不一样,就将其删除,然后使用删除
后的数据进行模型训练。

该方法的多次使用就是Repeated Edited Nearest Neighbor(RENN),即重复ENN的步骤,直到数据集无法再被删除后,再进行模型训练。
3、Tomek Link Removal
在实际业务中,数据不但存在样本不均衡的现象,还经常伴随着不同类别的样本重叠问题,如下图。这种情况下,如果直接采用smote进行过采样,会加剧样本的重叠,影响分类效果。此时,我们就可以采用欠采样的方法——Tomek Link Removal。


2.1.2 过采样(上采样,oversampling)
1、随机过采样
例如,数据中有正样本50条,负样本950条,正样本占比5%。随机过采样就是将正样本复制10次,如此之后,正样本就有500例,与负样本组成新的训练集(500+950)。这样,正样本所占的比例就是500/1450=35%。随机过采样的优点是相对于负采样,没有数据信息的丢失;缺点是对较少类别的复制,这增加了过拟合的可能性。
2、SMOTE算法
SMOTE(Synthetic Minority Oversampling Technique, 合成少数类过采样技术),是基于随机过采样的一种改进方法。由于随机复制少数样本来增加样样本进行训练的模型缺少泛化能力,并容易过拟合,因此SMOTE算法采用对少数样本进行人工合成的方法将新样本加入训练集中,从而使模型训练更具有泛化能力。SMOTE算法的基本思想是:通过对少数类样本进行插值来产生更多的少数类样本,即针对每个少数类样本,从它的k近邻中随机选择一个样本 (该样本也是少数类中的一个),然后在两者之间的连线上随机选择一点作为新合成的少数类样本。具体步骤如下:
(1)计算少量类别的样本与所有样本点的距离
(2)根据样本的不平衡设定过采样倍率,找到最近的k个样本。
(3)对于每一个新生成的样本按这个方法的优点是通过人工构造相似样本取代直接复制的方法,减弱了过拟合,也没有丢失有用的信息;缺点是由于没有考虑到近邻样本可能来自不同类别,因此导致增大类别间的重叠。

2.1.3 欠采样和过采样的结合
欠采样和过采样的结合方法如下:
SMOTE + Tomek Link Removal SMOTE + ENN
PS:Python都知道技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入。
老规矩,道友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!




