<br/> ##基础概念
类别不均衡是指在分类学习算法中,不同类别样本的比例相差悬殊,它会对算法的学习过程造成重大的干扰。比如在一个二分类的问题上,有1000个样本,其中5个正样本,995个负样本,在这种情况下,算法只需将所有的样本预测为负样本,那么它的精度也可以达到99.5%,虽然结果的精度很高,但它依然没有价值,因为这样的学习算法不能预测出正样本。这里我们可以知道不均衡问题会导致样本较少那一类的高错分率,即较少一类的样本会有较大的比例会被预测成样本数量较多的那一类。
<br/> ##解决方法
1、欠采样,减少数量较多那一类样本的数量,使得正负样本比例均衡。 2、过采样,增加数量较少那一类样本的数量,使得正负样本比例均衡。 3、不处理样本,样本分类阈值移动。
<br/> ##欠采样
<br/> ###随机欠采样 随机欠采样是指随机从多数类样本中抽取一部分数据进行删除,随机欠采样有一个很大的缺点是未考虑样本的分布情况,而采样过程又具有很大的随机性,可能会误删多数类样本中一些重要的信息。
<br/> ###EasyEnsemble 和 BalanceCascade
EasyEnsemble是通过多次从多数类样本有放回的随机抽取一部分样本生成多个子数据集,将每个子集与少数类数据联合起来进行训练生成多个模型,然后集合多个模型的结果进行判断。这种方法看起来和随机森林的原理很相似。
BalanceCascade是通过一次随机欠采样产生训练集,训练一个分类器,对于那些分类正确的多数类样本不放回,然后对这个剩下的多数类样本再次进行欠采样产生第二个训练集,训练第二个分类器,同样把分类正确的样本不放回,以此类推,直到满足某个停止条件,最终的模型也是多个分类器的组合。
<br/> ###基于knn欠采样
有四种 KNN 欠抽样方法:
- NearMiss-1 :选择到最近的三个少数类样本平均距离最小的那些多数类样本
- NearMiss-2 :选择到最远的三个少数类样本平均距离最小的那些多数类样本
- NearMiss-3 :为每个少数类样本选择给定数目的最近多数类样本,目的是保证每个少数类样本都被一些多数类样本包围
- 最远距离 :选择到最近的三个少数类样本平均距离最大的那些多数类样本
<br/> ##过采样
<br/> ###随机过采样
随机欠采样是指多次随机从少数类样本中有放回的抽取数据,采样数量大于原有的少数类样本数量,其中有一部分数据会出现重复,而重复数据的出现会增大方差造成模型的过拟合。
<br/> ###SMOTE算法
SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
SMOTE 算法是利用特征空间中现存少数类样本之间的相似性来建立人工数据的,也可以认为SMOTE算法假设了在相距较近的少数类样本之间的样本仍然是少数类, 具体过程如下:
- 随机选择一个少数类样本,计算它到少数类样本集中所有样本的距离,得到它k近邻。
- 根据样本不平衡比例设置一个采样比例以确定采样倍率n,对于每一个少数类样本x,从其k近邻中随机选择若干个样本
- 对于每一个随机选出的近邻,选择一个在[0,1]之间的随机数乘以随机近邻和x的特征向量的差,然后加上一个x, 用公式表示:
SMOTE算法摒弃了随机过采样复制样本的做法,可以防止随机过采样易过拟合的问题,而这些多出来的样本本身不带有信息,而且SMOTE 算法对于每个原少数类样本产生相同数量的合成数据样本,这就使得类间发生重复的可能性加大。
<br/> ###Borderline-SMOTE算法
Borderline-SMOTE算法较SMOTE算法提升的地方是只为那些K近邻中有一半以上多数类样本的少数类样本生成新样本,因为这些样本容易被错分,而在这些少数类样本附近生存人工合成样本,有助于少数类样本的分类正确。而如果少数类样本周围全是多数类样本,这种情况下,这个样本会被认定为噪声样本。
Borderline-SMOTE算法筛选样本的公式如下:
它的选择过程如下:
- 对于每个 xi⊂Smin 确定一系列最近邻样本集,称该数据集为 Si:k−nn,且 Si:k−nn⊂S
- 对每个样本 xi ,判断出最近邻样本集中属于多数类样本的个数,即:|Si:k−nn⋂Smaj|
- 选择满足上面不等式的 xi
<br/> ###基于k-means过采样
基于k-means聚类过采样方法一般分为两步:
- 首先分别对正负例进行K-means聚类
- 聚类之后,对其中较小的簇进行上面的过采样方法扩充样本数量
- 然后在进行正负类样本均衡扩充
该算法不仅可以解决类间不平衡问题,而且还能解决类内部不平衡问题。
<br/> ##分类阈值移动
通常在一个二分类的问题中,我们经常将0.5作为预测结果的分类标准,比如将预测概率大于0.5分为A类,预测概率小于0.5分为B类,这里的0.5就是分类阈值。
在二分类问题中,假如预测一个样本为A的概率为p,那么它为B的概率为1-p,而p/(1-p)表示两类可能性的比,即几率(odds),或称为优势比。如果p/(1-p)>1,我们认为该样本是A类的几率大于B。然而,在一个数据集中正负样本比例不相同时,此时会有一个观测几率,假设在数据集中有m个A样本,n个B样本,那么观测几率为m/n(样本均衡的情况下观测几率为1)。
在算法分类过程中,如果预测几率p/(1-p)大于实际的观测几率m/n,此时我们才把样本分类为A,而不是以0.5作为分类阈值(样本均衡情况下以0.5作为阈值) 用公式表示:p/(1-p)>m/n
计算结果得到p>m/(m+n) 此时只有当p大于m/(m+n)时,预测结果为A类,这里m/(m+n) 取代0.5成为新的分类阈值。
借助以上的原理,在分类学习中面对样本不均衡时,我们可以采用原有不均衡的样本进行学习,然后通过改变决策规则来做分类,比如在样本均衡时我们0.5作为分类阈值,而在样本不均衡的情况下我们可以规定预测概率需要达到0.8才能被预测为多数类。
来源:oschina
链接:https://my.oschina.net/u/4330019/blog/4004351