1. 数据不平衡的数据处理
1. 数据不平衡的数据处理
2. 数据不平衡的分类器评价指标
1. 前言
什么是不平衡数据呢?顾名思义即我们的数据集样本类别比例不均衡。数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分类算法会过多地关注多数类,从而使得少数类样本的分类性能下降。绝大多数常见的机器学习算法对于不平衡数据集都不能很好地工作。
1.1 数据不平衡例子
不平衡数据的场景出现在互联网应用的方方面面,如搜索引擎的点击预测(点击的网页往往占据很小的比例)、电子商务领域的商品推荐(推荐的商品被购买的比例很低)、信用卡欺诈检测、网络攻击识别、癌症检测等等。
主要有以下几种处理数据不平衡的方法
2. 数据层面
2.1 重采样
2.1.1 欠采样(下采样)
欠采样是通过减少丰富类的大小来平衡数据集,当数据量足够时就该使用此方法。通过保存所有稀有类样本,并在丰富类别中随机选择与稀有类别样本相等数量的样本,然后根据平衡的新数据集以进一步建模。
2.1.2 过采样(上采样)
当数据量不足时主要使用过采样,它尝试通过增加稀有样本的数量来平衡数据集,而不是去除丰富类别的样本的数量。通过使用重复、自举或合成少数类过采样等方法(SMOTE)来生成新的稀有样品。
2.2 增加权值
首先根据代价敏感学习,学习一个合理的类别样本分布比例(相当于不同类别的权值)。然后将大类样本随机划分成一系列不相交子集。这些子集的大小由稀有类样本集的数量和预先学习的样本分布比例决定。接下来分别将这些不相交子集跟稀有类样本结合,组成一系列平衡的分类子问题,单独训练成子分类器。最后将这些子分类器的输出进一步学习成组合分类器。这种方法在信用卡非法使用检测问题上大大降低了总代价。
3. 算法层面
集成方法
- 平衡随机森林的方法,该方法对正类和反类分别进行重采样,重采样多次后采用多数投票的方法进行集成学习。
- 将boosting算法与SMOTE算法结合成SMOTEBoost算法,该算法每次迭代使用SMOTE生成新的样本,取代原有AdaBoost算法中对样本权值的调整,使得Boosting算法专注于正类中的难分样本。
代价敏感方法
在大部分不平衡分类问题中,稀有类是分类的重点。在这种情况下,正确识别出稀有类的样本比识别大类的样本更有价值。反过来说,错分稀有类的样本需要付出更大的代价。代价敏感学习赋予各个类别不同的错分代价(Cost),它能很好地解决不平衡分类问题。以二分类问题为例,假设正类是稀有类,并具有更高的错分代价,则分类器在训练时,会对错分正类样本做更大的惩罚迫使最终分类器对正类样本有更高的识别率。如Metacost和Adacost等算法。
其他方法
一分类(One Class Learning或异常检测(Novelty Detection)
对于正负样本极不平衡的场景,我们可以换一个完全不同的角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题。这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-class SVM等。调整SVM以惩罚稀有类别的错误分类。
处理的经验
- 在正负样本都非常之少的情况下,应该采用数据合成的方式;
- 在负样本足够多,正样本非常之少且比例及其悬殊的情况下,应该考虑一分类方法(癌症检测);
- 在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样或者加权的方法。