解决不平衡问题?

类别不平衡(class-imbalance)就是指分类任务中不同类别的训练样例数目差别很大的情况。在现实的分类学习任务中,我们经常会遇到类别不平衡,例如在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(一对其余,One vs. Rest,简称OvR)、MvM(多对多,Many vs. Many,简称MvM)策略后产生的二分类任务扔可能出现类别不平衡现象,因此有必要了解类别不平衡性处理的基本方法。
1、欠采样方法
含义:直接对训练集中多数类样本进行“欠采样”(undersampling),即去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。
随机欠采样顾名思义即从多数类S_major中随机选择一些样样本组成样本集E 。然后将样本集E 从 S_major 中移除。新的数据集 S_new_major = S_major - E。
缺点:

随机欠采样方法通过改变多数类样本比例以达到修改样本分布的目的,从而使样本分布较为均衡,但是这也存在一些问题。对于随机欠采样,由于采样的样本集合要少于原来的样本集合,因此会造成一些信息缺失,即将多数类样本删除有可能会导致分类器丢失有关多数类的重要信息。

为了克服随机欠采样方法导致的信息缺失问题,又要保证算法表现出较好的不均衡数据分类性能,出现了欠采样法代表性的算法EasyEnsembleBalanceCascade算法。
EasyEnsemble:
1)从多数类中有放回的随机采样n次,每次选取与少数类数目相近的样本个数,那么可以得到n个样本集合记作。
2)然后,将每一个多数类样本的子集与少数类样本合并并训练出一个模型,可以得到n个模型。
3)最终将这些模型组合形成一个集成学习系统,最终的模型结果是这n个模型的平均值。
BalanceCascade:
BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是:

1)在每一轮训练时都使用多数类与少数类数量相等的训练集,训练出一个Adaboost基分类器。

2)然后使用该分类器对全体多数类进行预测,通过控制分类阈值来控制假正例率(False Positive Rate),将所有判断正确的类删除。

3)最后,进入下一轮迭代中,继续降低多数类数量。

2、过采样方法
含义:对训练集里的少数类进行“过采样”(oversampling),即增加一些少数类样本使得正、反例数目接近,然后再进行学习。
随机过采样是在少数类S_min中随机选择一些样本,然后通过复制所选择的样本生成样本集E,将它们添加到S_min中来扩大原始数据集从而得到新的少数类集合S_new_min。新的数据集S_new_min = S_min + E。
缺点:

对于随机过采样,由于需要对少数类样本进行复制来扩大数据集,造成模型训练复杂度加大。另一方面也容易造成模型的过拟合问题,因为随机过采样是简单的对初始样本进行复制采样,这就使得学习器学得的规则过于具体化,不利于学习器的泛化性能,造成过拟合问题。

为了解决随机过采样中造成模型过拟合问题,又能保证实现数据集均衡的目的,出现了过采样法代表性的算法SMOTE和Borderline-SMOTE算法。
过采样代表性算法-SMOTE
SMOTE全称是Synthetic Minority Oversampling即合成少数类过采样技术。SMOTE算法是对随机过采样方法的一个改进算法,由于随机过采样方法是直接对少数类进行重采用,会使训练集中有很多重复的样本,容易造成产生的模型过拟合问题。而SOMT算法的基本思想:
1)对于少数类中的每一个样本Xi,以欧氏距离为标准计算它到少数类样本集S_min中所有样本的距离,得到其k近邻
2)2).根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本Xi,从其k近邻中随机选择若干个样本Xi,假设选择的是 。
3)对于每一个随机选出来的近邻
Xi,分别与Xi按照如下公式构建新的样本。

SMOTE算法也存以下两个缺点:
1)由于对每个少数类样本都生成新样本,因此容易发生生成样本重叠的问题。
2)在SMOTE算法中,出现了过度泛化的问题,主要归结于产生合成样本的方法。特别是,SMOTE算法对于每个原少数类样本产生相同数量的合成数据样本,而没有考虑其邻近样本的分布特点,这就使得类间发生重复的可能性增大。

------------------------------------------
解决办法总结:

  1. 过抽样
    抽样处理不平衡数据的最常用方法,基本思想就是通过改变训练数据的分布来消除或减小数据的不平衡。
    过抽样方法通过增加少数类样本来提高少数类的分类性能 ,最简单的办法是简单复制少数类样本,缺点是可能导致过拟合,没有给少数类增加任何新的信息。改进的过抽样方法通过在少数类中加入随机高斯噪声或产生新的合成样本等方法。
    注意:好像对svm没用
  2. 欠抽样方法通过减少多数类样本来提高少数类的分类性能,最简单的方法是通过随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类的一些重要信息,不能够充分利用已有的信息。
  3. 算法层面,采用代价敏感方法。
    (1)重构训练集的方法。不改变已有算法,而是根据样本的不同错分代价给训练集中的每一个样本赋一个权值,接着按权重对原始样本集进行重构。
    (2)引入代价敏感因子,设计出代价敏感的分类算法。通常对小样本赋予较高的代价,大样本赋予较小的代价,期望以此来平衡样本之间的数目差异。
  4. 特征选择
    样本数量分布很不平衡时,特征的分布同样会不平衡。尤其在文本分类问题中,在大类中经常出现的特征,也许在稀有类中根本不出现。因此,根据不平衡分类问题的特点,选取最具有区分能力的特征,有利于提高稀有类的识别率 。
    按照一个经验性的样本比例,挑选正负2个样本集,分别从中选择最能表示该类样本的特征集,然后将这些特征集合并作为最后挑选的特征。
  5. 不平衡学习的评价方法
    1.F1度量
    2.ROC曲线和AUC面积
    3.G-Mean
  6. 类别不均衡 机器学习 类别不平衡的处理方法_数据集

如何选择:

(1)在正负样本都非常少的情况下,应该采用数据合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。

(2)在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样的方法或者是加权的方法。