采样
什么是类不平衡问题
类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均。比如说一个二分类问题,1000个训练样本,比较理想的情况是正类、负类样本的数量相差不多;而如果正类样本有995个、负类样本仅5个,就意味着存在类不平衡。
在后文中,把样本数量过少的类别称为“少数类”。
但实际上,数据集上的类不平衡到底有没有达到需要特殊处理的程度,还要看不处理时训练出来的模型在验证集上的效果。有些时候是没必要处理的。
SMOTE过采样算法
SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中.
对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集SminSmin中所有样本的距离,得到其k近邻。
根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。
对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本
α=random[0,1]
x=x+α(x−xn)
smote算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b(m个),然后在a、b之间的连线上随机选一点作为新合成的少数类样本(也就是在临近的m个)。
EasyEnsemble欠采样算法
EasyEnsemble 核心思想是:
首先通过从多数类中独立随机抽取出若干子集
将每个子集与少数类数据联合起来训练生成多个基分类器
最终将这些基分类器组合形成一个集成学习系统
EasyEnsemble 算法被认为是非监督学习算法,因此它每次都独立利用可放回随机抽样机制来提取多数类样本
代价敏感学习
还有一种方法比较好的在样本不平衡的时候派上用场,那就是接下来要讲的代价敏感学习。前面讲的方法可以总结为在样本纬度上来解决这个问题,不管是欠采样还是过采样,接下来这个方法就是从学习的过程中来解决这个问题。
L(θ)=∑yilog(h(xi)+(1−yi)log(1−h(xi))
经典的交叉熵损失函数。
那么要使样本预测错误最少,让l(θ)达到最小即可,好吧这是机器学习的套路。在代价敏感的前提下,在继续推导之前,首先加入正负样本权值[α,β],那么公式变成下面这个样子。
L(θ)=∑αyilog(h(xi)+β(1−yi)log(1−h(xi))
显而易见,多了两个权重,α、β, 然后我们对现在的公式求导,当然是对θ,咱们放弃求导的过程,将生命放到有用的地方,得出的式子如下:
∂θ∂L(θ)=∑αyi+(β−α)h(xi)yi−βh(xi)
这个公式好复杂,一般咱们面对这个复杂的公式,可以做一定的假设来看看公式的意义,例如我们假设yi=0,那么上面这个公式的就剩下βh(xi),就是β乘以一个预测xi为1的概率,同理我们假设yi=1,那么上面这个函数就剩下α(1−h(xi)).道理就和上面解释的一样。
综上所述,正负样本权值[α,β]放大了其中判错某一类的代价,那么正负样本权值的取值应该如何来取呢?一般来说,根据真实生产环境中的正负样本比例来取值较为稳妥。以信用卡反欺诈为例,一个稳定的反欺诈体系中出现的欺诈与非欺诈比例相对来说较为稳定,不会有太大的变化(如果发生较大变化,那么意味着模型或者策略需要调整)。假设模型为二分类,根据正负样本比例取值方法如下:
[α,β]=[2n0n,2n1n]
其中n为总的样本数,n0和n1分别是正样本和负样本的数量。2是分类的个数,多分类也可以拓展这个公式。