經常使用的分類算法通常假設不一樣類的比例是均衡的,現實生活中常常遇到不平衡的數據集,好比廣告點擊預測(點擊轉化率通常都很小)、商品推薦(推薦的商品被購買的比例很低)、信用卡欺詐檢測等等。算法
對於不平衡數據集,通常的分類算法都傾向於將樣本劃分到多數類,體如今總體的準確率很高。安全
但對於極不均衡的分類問題,好比僅有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)方法預測,若預測結果和實際類別標籤不符,則剔除該樣本。