类别不平衡问题处理方法
1.基础概念
类别不均衡是指在分类学习算法中,不同类别样本的比例相差悬殊,它会对算法的学习过程造成重大的干扰。比如在一个二分类的问题上,有1000个样本,其中5个正样本,995个负样本,在这种情况下,算法只需将所有的样本预测为负样本,那么它的精度也可以达到99.5%,虽然结果的精度很高,但它依然没有价值,因为这样的学习算法不能预测出正样本。这里我们可以知道不均衡问题会导致样本较少那一类的高错分率,即较少一类的样本会有较大的比例会被预测成样本数量较多的那一类。
2.解决方法
1、欠采样,减少数量较多那一类样本的数量,使得正负样本比例均衡。
2、过采样,增加数量较少那一类样本的数量,使得正负样本比例均衡。
3、不处理样本,样本分类阈值移动。**
欠采样方法
随机欠采样
随机欠采样是指随机从多数类样本中抽取一部分数据进行删除
缺点:
对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息
为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsemble和BalanceCascade算法
EasyEnsemble 和 BalanceCascade
EasyEnsemble算法步骤(与随机森林原理相似):
1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作。
2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。
BalanceCascade算法步骤(基于Adaboost框架):
1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。
2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。
3)最后,进入下一轮迭代中,继续降低多数类数量。
基于knn欠采样
有四种 KNN 欠抽样方法:
NearMiss-1 :选择到最近的三个少数类样本平均距离最小的那些多数类样本
NearMiss-2 :选择到最远的三个少数类样本平均距离最小的那些多数类样本
NearMiss-3 :为每个少数类样本选择给定数目的最近多数类样本,目的是保证每个少数类样本都被一些多数类样本包围
最远距离 :选择到最近的三个少数类样本平均距离最大的那些多数类样本
过采样
随机过采样
随机欠采样是指多次随机从少数类样本中有放回的抽取数据
缺点:
对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题
SMOTE算法
SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
算法步骤:
1).对于少数类中的每一个样本
X
i
Xi
Xi,以欧氏距离为标准计算它到少数类样本集
S
m
i
n
Smin
Smin中所有样本的距离,得到其k近邻。
2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本 X i Xi Xi,从其k近邻中随机选择若干个样本,假设选择的是 X i Xi Xi。
3).对于每一个随机选出来的近邻,分别与按照如下公式构建新的样本。
缺点:
1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题
2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大
Borderline-SMOTE算法
1)步骤一:
(1)计算少数类样本集中
S
m
i
n
Smin
Smin每一个样本在训练集F中的k个最近邻。
(2)然后,根据这k个最近邻对
S
m
i
n
Smin
Smin中的样本进行归类:
a. 假设这k个最近邻都是多数类样本,则我们将该样本定义为噪声样本,将它放在集合
N
′
N'
N′中。
b.假设k个最近邻都是少数类样本则该样本是远离分类边界的,将其放入S集合中。
c.最后,K个最近邻即有多数类样本又有少数类样本,则认为是边界样本,放入B集合中。
2)步骤二:
(1)设边界样本集
B
=
[
f
1
′
,
f
2
′
,
.
.
.
,
f
n
’
]
B=[f1', f2',...,fn’]
B=[f1′,f2′,...,fn’],计算B集合中的每一个样本
f
i
,
i
=
1
,
2...
n
fi,i=1,2...n
fi,i=1,2...n,在少数类样本集
S
m
i
n
Smin
Smin中的K个最近邻,组成集合
f
i
j
fij
fij 。
(2).随机选出s(1<s<n)个最近邻。
(3).计算出它们各自与该样本之间的全部属性的差值
d
i
j
dij
dij
(4).然后乘以一个随机数
r
i
j
,
0
<
r
i
j
<
1
rij,0<rij<1
rij,0<rij<1,如果
f
i
j
fij
fij是集合
N
′
N'
N′或S集合中的样本,则
0
<
r
i
j
<
0.5
0<rij<0.5
0<rij<0.5,最后生成的人工少数类样本为:
h
i
j
=
f
i
′
+
r
i
j
∗
d
i
j
,
j
=
1
,
2
,
.
.
.
,
s
hij = fi' + rij * dij,j=1,2,...,s
hij=fi′+rij∗dij,j=1,2,...,s
基于k-means过采样
基于k-means聚类过采样方法一般分为两步:
- 首先分别对正负例进行K-means聚类
- 聚类之后,对其中较小的簇进行上面的过采样方法扩充样本数量,然后在进行正负类样本均衡扩充
该算法不仅可以解决类间不平衡问题,而且还能解决类内部不平衡问题。
分类阈值移动
通常在一个二分类的问题中,我们经常将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/(1-p)>m/n
p/(1−p)>m/n
计算结果得到:
p
>
m
/
(
m
+
n
)
p>m/(m+n)
p>m/(m+n)
此时只有当p大于
m
/
(
m
+
n
)
m/(m+n)
m/(m+n)时,预测结果为A类,这里$m/(m+n) $取代0.5成为新的分类阈值。
借助以上的原理,在分类学习中面对样本不均衡时,我们可以采用原有不均衡的样本进行学习,然后通过改变决策规则来做分类,比如在样本均衡时我们0.5作为分类阈值,而在样本不均衡的情况下我们可以规定预测概率需要达到0.8才能被预测为多数类。