常用的分類算法一般假設不同類的比例是均衡的,現實生活中經常遇到不平衡的數據集,比如廣告點擊預測(點擊轉化率一般都很小)、商品推薦(推薦的商品被購買的比例很低)、信用卡欺詐檢測等等。
對於不平衡數據集,一般的分類算法都傾向於將樣本划分到多數類,體現在整體的准確率很高。
但對於極不均衡的分類問題,比如僅有1%的人是壞人,99%的人是好人,最簡單的分類就是將所有人都划分為好人,都能得到99%的准確率,顯然這樣的分類並沒有提供任何的信息。
處理不平衡數據,可以從兩方面考慮:
一是改變數據分布,從數據層面使得類別更為平衡;
二是改變分類算法,在傳統分類算法的基礎上對不同類別采取不同的加權方式,使得更看重少數類。
本文主要從數據的角度出發,主要方法為采樣,分為欠采樣和過采樣以及對應的一些改進方法。
一、欠采樣
隨機欠采樣
減少多數類樣本數量最簡單的方法便是隨機剔除多數類樣本,可以事先設置多數類與少數類最終的數量比例,在保留少數類樣本不變的情況下,根據比例隨機選擇多數類樣本。
-
優點:操作簡單,只依賴於樣本分布,不依賴於任何距離信息。
-
缺點:會丟失一部分多數類樣本的信息,無法充分利用已有信息。
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的效果最好,不過這也是需要綜合考慮數據集和采樣比例的不同造成的影響。
二、過采樣
隨機過采樣
與欠采樣對應,增加少數類樣本數量最簡單的方法便是隨機復制少數類樣本,可以事先設置多數類與少數類最終的數量比例,在保留多數類樣本不變的情況下,根據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-1:從少數類樣本集合P中得到k個最近鄰樣本,再隨機選擇樣本點和xi作隨機的線性插值產生新的少數類樣本。(和普通SMOTE算法流程相同)
- Borderline SMOTE-2:從少數類樣本集合P和多數類樣本集合N中分別得到k個最近鄰樣本Pk和Nk。設定一個比例α,在Pk中選出α比例的樣本點和xi作隨機的線性插值產生新的少數類樣本,方法同Borderline SMOTE-1;在Nk中選出1−α比例的樣本點和xi作隨機的線性插值產生新的少數類樣本,此處的隨機數范圍選擇的是(0,0.5),即使得產生的新的樣本點更靠近少數類樣本。
下圖可以幫助我們直觀理解Borderline SMOTE的基本想法。考慮最近的m=5個樣本:
-
對於A而言,最近的5個樣本均屬於多數類樣本,認為A為噪聲點,在其附近產生少數類樣本會使得噪聲的影響更大
-
對於C而言,最近的5個樣本中有3個屬於少數類樣本,2個屬於多數類樣本,此類樣本是不容易被錯分的,認為C為安全點
-
對於B而言,最近的5個樣本中有2個屬於少數類樣本,3個屬於多數類樣本,此類樣本容易被錯分,認為B處於少數類的邊界上,加入危險集
-
最終只會對B這類的樣本點做SMOTE操作

三、綜合采樣
目前為止我們使用的重采樣方法幾乎都是只針對某一類樣本:對多數類樣本欠采樣,對少數類樣本過采樣。也有人提出將欠采樣和過采樣綜合的方法,解決樣本類別分布不平衡和過擬合問題,本部分介紹其中的兩個例子: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)方法預測,若預測結果和實際類別標簽不符,則剔除該樣本。
