不平衡資料下的機器學習方法簡介
機器學習已經成為了當前網際網路領域不可或缺的技術之一,前輩們對機器學習模型的研究已經給我們留下了一筆非常寶貴的財富,然而在工業界的應用中我們可以看到,應用場景千千萬萬,資料千千萬萬但是我們的模型卻依然是那些,在機器學習的應用中對資料的處理與分析往往扮演著比模型更加重要的角色,本文針對機器學習應用資料處理的一個方面即“不平衡資料”下的機器學習方法進行了簡單介紹,我的部落格。
引言
不管是在學術界還是工業界,不平衡學習已經吸引了越來越多的關注,不平衡資料的場景也出現在網際網路應用的方方面面,如搜尋引擎的點選預測(點選的網頁往往佔據很小的比例),電子商務領域的商品推薦(推薦的商品被購買的比例很低),信用卡欺詐檢測,網路攻擊識別等等。
問題定義
那麼什麼是不平衡資料呢?顧名思義即我們的資料集樣本類別極不均衡,以二分類問題為例,假設我們的資料集是$S$,資料集中的多數類為$S_maj$,少數類為$S_min$,通常情況下把多數類樣本的比例為$100:1$,$1000:1$,甚至是$10000:1$這種情況下為不平衡資料,不平衡資料的學習即需要在如此分佈不均勻的資料集中學習到有用的資訊。
為什麼不平衡學習
傳統的學習方法以降低總體分類精度為目標,將所有樣本一視同仁,同等對待,如下圖1所示,造成了分類器在多數類的分類精度較高而在少數類的分類精度很低。機器學習模型都有一個待優化的損失函式,以我們最常用最簡單的二元分類器邏輯迴歸為例,其損失函式如下公式1所示,邏輯迴歸以優化總體的精度為目標,不同類別的誤分類情況產生的誤差是相同的,考慮一個$500:1$的資料集,即使把所有樣本都預測為多數類其精度也能達到$500/501$之高,很顯然這並不是一個很好的學習效果,因此傳統的學習演算法在不平衡資料集中具有較大的侷限性。
圖1 傳統學習在不平衡資料下的缺點
公式1 邏輯迴歸的交叉熵損失函式
不平衡學習的方法
既然傳統的學習演算法在不平衡資料中具有較大的侷限性,那麼針對不平衡資料集又有怎樣的解決方案呢?解決方法主要分為兩個方面,第一種方案主要從資料的角度出發,主要方法為抽樣,既然我們的樣本是不平衡的,那麼可以通過某種策略進行抽樣,從而讓我們的資料相對均衡一些;第二種方案從演算法的角度出發,考慮不同誤分類情況代價的差異性對演算法進行優化,使得我們的演算法在不平衡資料下也能有較好的效果。
取樣
隨機取樣
取樣演算法通過某一種策略改變樣本的類別分佈,以達到將不平衡分佈的樣本轉化為相對平衡分佈的樣本的目的,而隨機取樣是取樣演算法中最簡單也最直觀易懂的一種方法。隨機取樣主要分為兩種型別,分別為隨機欠取樣和隨機過取樣兩種。隨機欠取樣顧名思義即從多數類$S_maj$中隨機選擇少量樣本$E$再合併原有少數類樣本作為新的訓練資料集,新資料集為$S_min+E$,隨機欠取樣有兩種型別分別為有放回和無放回兩種,無放回欠取樣在對多數類某樣本被取樣後不會再被重複取樣,有放回取樣則有可能。隨機過取樣則正好相反,即通過多次有放回隨機取樣從少數類$S_min$中抽取資料集$E$,取樣的數量要大於原有少數類的數量,最終的訓練集為$S_maj+E$。
可以看到隨機取樣通過改變多數類或少數類樣本比例以達到修改樣本分佈的目的,從而讓樣本分佈較為均衡,但是他們也存在一些問題。對於隨機欠取樣,由於取樣的樣本要少於原樣本集合,因此會造成一些資訊缺失,未被取樣的樣本往往帶有很重要的資訊。對於隨機過取樣,由於需要對少數類樣本進行復制因此擴大了資料集,造成模型訓練複雜度加大,另一方面也容易造成模型的過擬合問題。針對這些問題提出了幾種其它的取樣演算法。
SMOTE演算法
SMOTE全稱是Synthetic Minority Oversampling Technique即合成少數類過取樣技術,它是基於隨機過取樣演算法的一種改進方案,由於隨機過取樣採取簡單複製樣本的策略來增加少數類樣本,這樣容易產生模型過擬合的問題,即使得模型學習到的資訊過於特別(Specific)而不夠泛化(General),SMOTE演算法的基本思想是對少數類樣本進行分析並根據少數類樣本人工合成新樣本新增到資料集中,具體如圖2所示,演算法流程如下。
- 對於少數類中每一個樣本$x$,以歐氏距離為標準計算它到少數類樣本集$S_min$中所有樣本的距離,得到其k近鄰。
- 根據樣本不平衡比例設定一個取樣比例以確定取樣倍率$N$,對於每一個少數類樣本$x$,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為$\hat{x}$。
- 對於每一個隨機選出的近鄰$\hat{x}$,分別與原樣本按照如下的公式構建新的樣本。
圖2 SMOTE演算法
SMOTE演算法摒棄了隨機過取樣複製樣本的做法,可以防止隨機過取樣易過擬合的問題,實踐證明此方法可以提高分類器的效能。但是由於對每個少數類樣本都生成新樣本,因此容易發生生成樣本重疊(Overlapping)的問題,為了解決SMOTE演算法的這一缺點提出一些改進演算法,其中的一種是Borderline-SMOTE演算法,如圖3所示。
在Borderline-SMOTE中,若少數類樣本的每個樣本$x_i$求k近鄰,記作$S_i-knn$,且$S_i-knn$屬於整個樣本集合$S$而不再是少數類樣本,若滿足
則將樣本$x_i$加入DANGER集合,顯然DANGER集合代表了接近分類邊界的樣本,將DANGER當作SMOTE種子樣本的輸入生成新樣本。特別地,當上述條件取右邊界,即k近鄰中全部樣本都是多數類時,此樣本不會被選擇為種樣本生成新樣本,此情況下的樣本為噪音。
圖3 Borderline-SMOTE演算法
Informed Undersampling
既然SMOTE可以解決隨機過取樣容易發生的模型過擬合問題,對應地也有一些取樣方法可以解決隨機欠取樣造成的資料資訊丟失問題,答案是Informed undersampling取樣技術,informed undersampling取樣技術主要有兩種方法分別是EasyEnsemble演算法和BalanceCascade演算法。
EasyEnsemble演算法如下圖4所示,此演算法類似於隨機森林的Bagging方法,它把資料劃分為兩部分,分別是多數類樣本和少數類樣本,對於多數類樣本$S_maj$,通過n次有放回抽樣生成n份子集,少數類樣本分別和這n份樣本合併訓練一個模型,這樣可以得到n個模型,最終的模型是這n個模型預測結果的平均值。BalanceCascade演算法是一種級聯演算法,BalanceCascade從多數類$S_maj$中有效地選擇N且滿足$\midN\mid=\midS_min\mid$,將N和$\S_min$合併為新的資料集進行訓練,新訓練集對每個多數類樣本$x_i$進行預測若預測對則$S_maj=S_maj-x_i$。依次迭代直到滿足某一停止條件,最終的模型是多次迭代模型的組合。
圖4 EasyEsemble演算法
代價敏感學習
代價矩陣
取樣演算法從資料層面解決不平衡資料的學習問題,在演算法層面上解決不平衡資料學習的方法主要是基於代價敏感學習演算法(Cost-Sensitive Learning),代價敏感學習方法的核心要素是代價矩陣,我們注意到在實際的應用中不同型別的誤分類情況導致的代價是不一樣的,例如在醫療中,“將病人誤疹為健康人”和“將健康人誤疹為病人”的代價不同;在信用卡盜用檢測中,“將盜用誤認為正常使用”與“將正常使用識破認為盜用”的代價也不相同,因此我們定義代價矩陣如下圖5所示。標記$C_ij$為將類別j誤分類為類別i的代價,顯然$C_00=C_11=0$,$C_01,C_10$為兩種不同的誤分類代價,當兩者相等時為代價不敏感的學習問題。
圖5 代價矩陣
代價敏感學習方法
基於以上代價矩陣的分析,代價敏感學習方法主要有以下三種實現方式,分別是:
- 從學習模型出發,著眼於對某一具體學習方法的改造,使之能適應不平衡資料下的學習,研究者們針對不同的學習模型如感知機,支援向量機,決策樹,神經網路等分別提出了其代價敏感的版本。以代價敏感的決策樹為例,可從三個方面對其進行改進以適應不平衡資料的學習,這三個方面分別是決策閾值的選擇方面、分裂標準的選擇方面、剪枝方面,這三個方面中都可以將代價矩陣引入,具體實現演算法可參考參考文獻中的相關文章。
- 從貝葉斯風險理論出發,把代價敏感學習看成是分類結果的一種後處理,按照傳統方法學習到一個模型,以實現損失最小為目標對結果進行調整,優化公式如下所示。此方法的優點在於它可以不依賴所用具體的分類器,但是缺點也很明顯它要求分類器輸出值為概率。
- 從預處理的角度出發,將代價用於權重的調整,使得分類器滿足代價敏感的特性,下面講解一種基於Adaboost的權重更新策略。
AdaCost演算法
讓我們先來簡單回顧一下Adaboost演算法,如下圖6所示。Adaboost演算法通過反覆迭代,每一輪迭代學習到一個分類器,並根據當前分類器的表現更新樣本的權重,如圖中紅框所示,其更新策略為正確分類樣本權重降低,錯誤分類樣本權重加大,最終的模型是多次迭代模型的一個加權線性組合,分類越準確的分類器將會獲得越大的權重。
圖6 Adaboost演算法
AdaCost演算法修改了Adaboost演算法的權重更新策略,其基本思想是對於代價高的誤分類樣本大大地提高其權重,而對於代價高的正確分類樣本適當地降低其權重,使其權重降低相對較小。總體思想是代價高樣本權重增加得大降低得慢。其樣本權重按照如下公式進行更新。其中$\beta_+$和$\beta_-$分別表示樣本被正確和錯誤分類情況下$\beta$的取值。
不平衡學習的評價方法
正確率和F值
正確率和F值的計算都是基於混淆矩陣(Confusion Matrix)的,混淆矩陣如下圖7所示,每行代表預測情況,每列代表實際類別,TP,FP,FN,TN分別代表正類正確分類數量,預測為正類但是真實為負類,預測為負類但是真實為正類,負類正確分類數量。
圖7 混淆矩陣
正確率(Accuracy)和F值的計算如下式所示。可見正確率或錯誤率並不能表示不平衡資料下模型的表現,對於不平衡資料即使全部預測為多數類也可以達到較高的正確率較低的錯誤率,而F值同時考慮到了少數類的準確率和召回率,因此能衡量不平衡資料下模型的表現,其中$\beta$取值通常為1。
G-Mean
G-Mean是另外一個指標,也能評價不平衡資料的模型表現,其計算公式如下。
ROC曲線和AUC
為了介紹ROC曲線首先引入兩個是,分別是FP_rate和TP_rate,它們分別表示1-負類召回率和正類召回率,顯然模型表示最好的時候FP_rate=0且TP_rate=1,我們以FP_rate為橫座標,TP_rate為縱座標可以得到點(FP_rate,TP_rate),通過調整模型預測的閾值可以得到不同的點,將這些點可以連成一條曲線,這條曲線叫做接受者工作特徵曲線(Receiver Operating Characteristic Curve,簡稱ROC曲線)如下圖8所示。顯然A點為最優點,ROC曲線越靠近A點代表模型表現越好,曲線下面積(Area
Under Curve, AUC)越大,AUC是衡量模型表現好壞的一個重要指標。
圖8 ROC曲線
總結
本文介紹了不平衡資料下學習的常用方法及其評價指標,方法主要從資料和模型兩個層面考慮,資料方面的方法主要為取樣演算法,模型方面主要基於代價敏感學習。本文主要來源於論文“Learning from Imbalanced Data”,藉著組會主講的契機作了總結分享給各位,感謝師姐精美的PPT給了我很多靈感。