所谓类别不平衡问题就是分类任务中不同类别的训练案例数目差别极其大的情况。不是一般性,我们在这里讨论二分类问题中正例个数远远少于反例的情形。常见的处理非平衡数据集的办法主要有:

 

1.阈值移动(Threshold Moving):

      通常我们预测类别的方法是学习得到正例概率$P$,如果:\begin{equation}\frac{P}{1-P}> 1\end{equation}则我们判断样本为正,否则为负。但是对于“代价敏感模型”(cost sensitive learning),我们可以降低阈值1为以提高召回率,规避风险,例如在以:

\begin{equation}\frac{P}{1-P}> \frac{cost^{-}}{cost{+}}\end{equation}

 来作为预测的判别方法。

 

2. 欠采样法:

      所谓欠采样就是去掉一些反例使得正反例样本数量更加平衡再进行训练。欠采样方法大大降低了运算量,但是同时如果只是简单扔掉一些反例样本则可能造成信息的丢失。

   2.1 EasyEnsemble:

      一种避免信息丢失的欠采样算法就是Easy Emsemble[2]。EasyEnsumble算法的基本思想就是多次欠采样然后用AdaBoost方法集成,如下所示:

  机器学习:处理非平衡数据集的办法

 

    2.2  BalanceCascade,利用增量训练的思想(Boosting):

        先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的多数类样本不放回,然后对这个更小的多数类样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。具体操作如下:

                                                                           机器学习:处理非平衡数据集的办法

                                                                            机器学习:处理非平衡数据集的办法

    2.3 NearMiss算法

 

         从多数类样本中选取最具代表性的样本用于训练,主要是为了缓解随机欠采样中的信息丢失问题。所谓的“最具代表性”也就是直观上要更加靠近正例样本的反例样本。NearMiss采用一些启发式的规则来选择样本,根据规则的不同可分为3类:

 

  • NearMiss-1:选择到最近的K个正例样本平均距离最近的N个反例样本。
  • NearMiss-2:选择到最远的K个正例样本平均距离最近的N个反例样本
  • NearMiss-3:对于每个正例样本选择K个最近的反例样本,目的是保证每个少数类样本都被多数类样本包围。

 

3. 过采样:

 

       所谓过采样(Oversmapling)就是想方设法人为构造出更多的稀有类样本使得数据更加平衡,例如在图片分类问题里可以通过数据增广来增加稀有类别图片的数量。最简单直接的办法莫过于直接复制稀有类样本若干倍,但是这样会造成严重的过拟合。

       以下是两种常用的过采样法:

   3.1 SMOTE(Synthetic Minority Over-sampling Technique)

      SMOTE是运用最广泛的用于处理非平衡数据的上采用算法之一,它通过适当增加稀有数据类型的样本数来平衡数据,但是并不是简单的随机重复采样,而是加入一些线性插值得到的虚拟样本,并且借鉴了KNN算法,

  机器学习:处理非平衡数据集的办法

 

 

 

具体操作如下:

       输入:数据集D, $K, N$正整数且$N\leq K\leq $正例样本数

       输出:过采样后的数据集$D^{\prime}$

      Step 1. $D^{\prime}=D$

      Step 2. 找出D的正例样本子集$S$,

      Step 3:  对任意 $x\in S$, 找出S中离$x$最近的K个点 构成K领域 $B(x)$,

                随机从B(x)中取N个点$x_{1},...,x_{N}$,且随机取N个数$\lambda_{i}\in (0,1)$, i=1,...,N

                对i=1,...,N, 生成点$p_{i}=x+\lambda_{i}(x_{i}-x)$, 将$p_{i}$看作正例样本加入$D^{\prime}$中。  

   

   3.2 SMOTE的改进算法:Borderline-SMOTE

      SMOTE的一大缺点是加入的虚拟正例样本会产生两类严重重叠的现象。Borderline-SMOTE[3]为了改进这一大缺点而只对边界附近的正例样本进行插值,因为常见的分类算法,例如SVM,LR均主要敏感依赖于边界的数据,这样不仅降低了重叠,也减小了运算量。 如下图所示:

                                          机器学习:处理非平衡数据集的办法

Borderline-SMOTE先将正例样本分为三个子集,分别是危险的样本("DANGER" instance),安全的样本("SAFE" instance), 噪声点("NOISE"instance), 然后对所有危险样本点进行插值,具体的Borderline-SMOTE1算法如下:

                                                            机器学习:处理非平衡数据集的办法

另外还有Borderline-SMOTE2算法,只是在Step4那里略有不同,也就是除此之外对任意的 DANGER中的点不仅仅求s个P领域中的插值也求s个其在N领域里的插值,但是这时选择$r_{j}$为$(0,0.5)$中的随机数,以使得新得到的点更加接近于正例点。       

 

4. 更多方法

     未完待续,日后补充

 

 

参考文献:

1. Chawla, N.V., K.W.Bowyer, L.O.Hall, and W.P.Kegelmeyer.(2002) "SMOTE: Synthetic Minority Over-sampling Technique." Journal of Artificial Intelligence Research

2.  Liu, X.-Y.,J.Wu, and Z.H.Zhou,(2009),''Exploratory undersampling for class-imbalence learning.'' IEEE Transactions on Systems, Man, and Cybernetics-Part B: Cybernetics

3. Hui Han, Wen-Yuan Wang, and Bing-Huan Mao(2005) "Borderline-SMOTE: A New Over-Sampling Method in Imbalanced Data Sets Learning" ,ICIC 2005, Part I, LNCS 3644, pp. 878 – 887, 2005. © Springer-Verlag Berlin Heidelberg 2005 

4. 周志华:机器学习,清华大学出版社,2015.

5. ML | Handling Imbalanced Data with SMOTE and Near Miss Algorithm in Python:

https://www.geeksforgeeks.org/ml-handling-imbalanced-data-with-smote-and-near-miss-algorithm-in-python/

6. 不平衡数据集的处理