经常使用的分类算法通常假设不一样类的比例是均衡的,现实生活中常常遇到不平衡的数据集,好比广告点击预测(点击转化率通常都很小)、商品推荐(推荐的商品被购买的比例很低)、信用卡欺诈检测等等。算法
对于不平衡数据集,通常的分类算法都倾向于将样本划分到多数类,体如今总体的准确率很高。安全
但对于极不均衡的分类问题,好比仅有1%的人是坏人,99%的人是好人,最简单的分类就是将全部人都划分为好人,都能获得99%的准确率,显然这样的分类并无提供任何的信息。blog
处理不平衡数据,能够从两方面考虑:图片
一是改变数据分布,从数据层面使得类别更为平衡;it
二是改变分类算法,在传统分类算法的基础上对不一样类别采起不一样的加权方式,使得更看重少数类。io
本文主要从数据的角度出发,主要方法为采样,分为欠采样和过采样以及对应的一些改进方法。class
1、欠采样基础
随机欠采样随机数
减小多数类样本数量最简单的方法即是随机剔除多数类样本,能够事先设置多数类与少数类最终的数量比例,在保留少数类样本不变的状况下,根据比例随机选择多数类样本。搜索
优势:操做简单,只依赖于样本分布,不依赖于任何距离信息。
缺点:会丢失一部分多数类样本的信息,没法充分利用已有信息。
Tomek links方法
首先来看一些定义。假设样本点
首先来看一些定义。
假设样本点xi和xj属于不一样的类别,d(xi,xj)表示两个样本点之间的距离。
称(xi,xj)为一个Tomek link对,若是不存在第三个样本点xl使得d(xl,xi)<d(xi,xj)或者d(xl,xj)<d(xi,xj)成立。
容易看出,若是两个样本点为Tomek link对,则其中某个样本为噪声(偏离正常分布太多)或者两个样本都在两类的边界上。
下图是对Tomek link对的直观解释(其中加号为少数类,减号为多数类):A、B、C中的样本在两类的边界上,D、E中的多数类样本均为噪声。
Tomek link对通常有两种用途:
欠采样:将Tomek link对中属于多数类的样本剔除。
数据清洗:将Tomek link对中的两个样本都剔除。
NearMiss方法
NearMiss方法是利用距离远近剔除多数类样本的一类方法,实际操做中也是借助kNN,总结起来有如下几类:
NearMiss-1:在多数类样本中选择与最近的3个少数类样本的平均距离最小的样本。
NearMiss-2:在多数类样本中选择与最远的3个少数类样本的平均距离最小的样本。
NearMiss-3:对于每一个少数类样本,选择离它最近的给定数量的多数类样本。
NearMiss-1和NearMiss-2方法的描述仅有一字之差,但其含义是彻底不一样的:NearMiss-1考虑的是与最近的3个少数类样本的平均距离,是局部的;NearMiss-2考虑的是与最远的3个少数类样本的平均距离,是全局的。
NearMiss-1方法获得的多数类样本分布也是“不均衡”的,它倾向于在比较集中的少数类附近找到更多的多数类样本,而在孤立的(或者说是离群的)少数类附近找到更少的多数类样本,缘由是NearMiss-1方法考虑的局部性质和平均距离。
NearMiss-3方法则会使得每个少数类样本附近都有足够多的多数类样本,显然这会使得模型的精确度高、召回率低。
论文中有对这几种方法的比较,获得的结论是NearMiss-2的效果最好,不过这也是须要综合考虑数据集和采样比例的不一样形成的影响。
2、过采样
随机过采样
与欠采样对应,增长少数类样本数量最简单的方法即是随机复制少数类样本,能够事先设置多数类与少数类最终的数量比例,在保留多数类样本不变的状况下,根据ratio随机复制少数类样本。
在使用的过程当中为了保证全部的少数类样本信息都会被包含,能够先彻底复制一份全量的少数类样本,再随机复制少数类样本使得数量比例知足给定的ratio。
优势:操做简单,只依赖于样本分布,不依赖于任何距离信息,属于非启发式方法。
缺点:重复样本过多,容易形成分类器的过拟合。
SMOTE
SMOTE全称为Synthetic Minority Over-sampling Technique,主要思想来源于手写字识别:对于手写字的图片而言,旋转、扭曲等操做是不会改变原始类别的(要排除翻转和180度大规模旋转这类的操做,由于会使得“9”和“6”的类别发生变化),于是能够产生更多的样本。
SMOTE的主要思想也是经过在一些位置相近的少数类样本中生成新样本达到平衡类别的目的,因为不是简单地复制少数类样本,所以能够在必定程度上避免分类器的过分拟合。具体以下图:
其算法流程以下:
设置向上采样的倍率为N,即对每一个少数类样本都须要产生对应的N个少数类新样本。
对少数类中的每个样本x,搜索获得其k(一般取5)个少数类最近邻样本,并从中随机选择N个样本,记为y1,y2,…,yN(可能有重复值)。
构造新的少数类样本rj=x+rand(0,1)∗(yj−x),其中rand(0,1)表示区间(0,1)内的随机数。
Borderline SMOTE
原始的SMOTE算法对全部的少数类样本都是一视同仁的,但实际建模过程当中发现那些处于边界位置的样本更容易被错分,所以利用边界位置的样本信息产生新样本能够给模型带来更大的提高。Borderline SMOTE即是将原始SMOTE算法和边界信息结合的算法。它有两个版本:Borderline SMOTE-1和Borderline SMOTE-2。
Borderline SMOTE-1算法流程:
1 记整个训练集合为T,少数类样本集合为P,多数类样本集合为N。对P中的每个样本xi,在整个训练集合T中搜索获得其最近的m个样本,记其中少数类样本数量为mi。
3 对DANGER中的每个样本点,采用普通的SMOTE算法生成新的少数类样本。
Borderline SMOTE-2和Borderline SMOTE-1是很相似的,区别是在获得DANGER集合以后,对于DANGER中的每个样本点xi:
下图能够帮助咱们直观理解Borderline SMOTE的基本想法。考虑最近的m=5个样本:
对于A而言,最近的5个样本均属于多数类样本,认为A为噪声点,在其附近产生少数类样本会使得噪声的影响更大
对于C而言,最近的5个样本中有3个属于少数类样本,2个属于多数类样本,此类样本是不容易被错分的,认为C为安全点
对于B而言,最近的5个样本中有2个属于少数类样本,3个属于多数类样本,此类样本容易被错分,认为B处于少数类的边界上,加入危险集
最终只会对B这类的样本点作SMOTE操做
3、综合采样
目前为止咱们使用的重采样方法几乎都是只针对某一类样本:对多数类样本欠采样,对少数类样本过采样。也有人提出将欠采样和过采样综合的方法,解决样本类别分布不平衡和过拟合问题,本部分介绍其中的两个例子:SMOTE+Tomek links和SMOTE+ENN。
SMOTE+Tomek links
SMOTE+Tomek links方法的算法流程很是简单:
利用SMOTE方法生成新的少数类样本,获得扩充后的数据集T
剔除T中的Tomek links对。
普通SMOTE方法生成的少数类样本是经过线性差值获得的,在平衡类别分布的同时也扩张了少数类的样本空间,产生的问题是可能本来属于多数类样本的空间被少数类“入侵”(invade),容易形成模型的过拟合。
Tomek links对寻找的是那种噪声点或者边界点,能够很好地解决“入侵”的问题。
下图红色加号为SMOTE产生的少数类样本,能够看到,红色样本“入侵”到本来属于多数类样本的空间,这种噪声数据问题能够经过Tomek links很好地解决。
因为第一步SMOTE方法已经很好地平衡了类别分布,所以在使用Tomek links对的时候考虑剔除全部的Tomek links对(而不是只剔除Tomek links对中的多数类)。
SMOTE+ENN
SMOTE+ENN方法和SMOTE+Tomek links方法的想法和过程都是很相似的:
利用SMOTE方法生成新的少数类样本,获得扩充后的数据集T。
对T中的每个样本使用kNN(通常k取3)方法预测,若预测结果和实际类别标签不符,则剔除该样本。