1.什么是類別不平衡問題
如果不同類別的訓練樣例數目稍有差別,通常影響不大,但若差別很大,則會對學習過程造成困擾。例如有998個反例,但是正例只有2個,那么學習方法只需要返回一個永遠將新樣本預測為反例的學習器,就能達到99.8%的精度;然而這樣的學習器往往沒有價值,因為它不能預測出任何正例。
類別不平衡(class-imbalance)就是指分類任務中不同類別的訓練樣例數目差別很大的情況。在現實的分類學習任務中,我們經常會遇到類別不平衡,例如在通過拆分法解決多分類問題時,即使原始問題中不同類別的訓練樣例數目相當,在使用 OvR(一對其余,One vs. Rest,簡稱OvR)、MvM(多對多,Many vs. Many,簡稱MvM)策略后產生的二分類任務扔可能出現類別不平衡現象,因此有必要了解類別不平衡性處理的基本方法。
2.解決類別不平衡問題
2.1欠采樣方法
什么是欠采樣方法?
直接對訓練集中多數類樣本進行“欠采樣”(undersampling),即去除一些多數類中的樣本使得正例、反例數目接近,然后再進行學習。
隨機欠采樣方法
隨機欠采樣顧名思義即從多數類 $S_{m a j}$ 中隨機選擇一些樣樣本組成樣本集 $E$ 。然后將樣本集 $E$ 從 $S_{m a j}$ 中移除。新的數據集 $S_{n e w-m a j}=S_{m a j}-E$ 。
缺點:
-
- 隨機欠采樣方法通過改變多數類樣本比例以達到修改樣本分布的目的,從而使樣本分布較為均衡,但是這也存在一些問題。對於隨機欠采樣,由於采樣的樣本集合要少於原來的樣本集合,因此會造成一些信息缺失,即將多數類樣本刪除有可能會導致分類器丟失有關多數類的重要信息。
- 為了克服隨機欠采樣方法導致的信息缺失問題,又要保證算法表現出較好的不均衡數據分類性能,出現了欠采樣法代表性的算法 EasyEnsemble 和BalanceCascade 算法。
欠采樣代表性算法——EasyEnsemble
-
- 從多數類中有放回的隨機采樣 $n$ 次,每次選取與少數類數目相近的樣本個數,那 么可以得到 $n$ 個樣本集合記作 $\left\{S_{1 m a j}, S_{2 m a j}, \ldots, S_{n m a j}\right\}$ 。
- 然后,將每一個多數類樣本的子集與少數類樣本合並並訓練出一個模型,可以 得到 $n$ 個模型。
- 最終將這些模型組合形成一個集成學習系統,最終的模型結果是這 $\mathrm{n}$ 個模型的平均值。
欠采樣代表性算法-BalanceCascade
BalanceCascade 算法基於 Adaboost,將 Adaboost 作為基分類器,其核心思路是:
-
- 在每一輪訓練時都使用多數類與少數類數量相等的訓練集,訓練出一個Adaboost基分類器。
- 然后使用該分類器對全體多數類進行預測,通過控制分類閾值來控制假正例率(False Positive Rate),將所有判斷正確的類刪除。
- 最后,進入下一輪迭代中,繼續降低多數類數量。
擴展閱讀:
Liu X Y, Wu J, Zhou Z H. Exploratory undersampling for class-imbalance learning[J]. IEEE Transactions on Systems, Man, and Cybernetics, Part B (Cybernetics), 2009, 39(2): 539-550.
這篇論文提出了兩種欠采樣的方法:EasyEnsemble和BalanceCascade。
2.2過采樣方法
什么是過采樣方法
對訓練集里的少數類進行“過采樣”(oversampling),即增加一些少數類樣本使得正、反例數目接近,然后再進行學習。
隨機過采樣方法
-
- 隨機過采樣是在少數類 $S_{\min }$ 中隨機選擇一些樣本,然后通過復制所選擇的樣本生成樣本集 $E$ ,將 它們添加到 $S_{\min }$ 中來擴大原始數據集從而得到新的少數類集合 $S_{n e w-m i n}$ 。新的數據集 $S_{n e w-\min }=S_{\min }+E$ 。
缺點:
-
- 對於隨機過采樣,由於需要對少數類樣本進行復制來擴大數據集,造成模型訓練復雜度加大。另一方面也容易造成模型的過擬合問題,因為隨機過采樣是簡單的對初始樣本進行復制采樣,這就使得學習器學得的規則過於具體化,不利於學習器的泛化性能,造成過擬合問題。
- 為了解決隨機過采樣中造成模型過擬合問題,又能保證實現數據集均衡的目的,出現了過采樣法代表性的算法 SMOTE 和 Borderline-SMOTE 算法。
過采樣代表性算法-SMOTE
-
- SMOTE 全稱是 Synthetic Minority Oversampling 即合成少數類過采樣技術。SMOTE 算法是對隨機過采樣方法的一個改進算法,由於隨機過采樣方法是直接對少數類進行重采用,會使訓練集中有 很多重算的樣本,容易造成產生的模型過擬合問題。而 SOMT 算法的基本思想是對每個少數類樣本 $x_{i}$ ,從它的最近鄰中隨機選擇一個樣本 $\hat{x}_{i}\left(\hat{x}_{i}\right.$ 是少數類中的一個樣本),然后在 $x_{i}$ 和 $\hat{x}_{i}$ 之間的 連線上隨機選擇一點作為新合成的少數類樣本。
SMOTE算法合成新少數美樣本的算法描述如下:
-
- 對於少數類中的每一個樣本 $x_{i}$ ,以歐氏距離為標准計算它到少數類樣本集 $S_{\min }$ 中所有樣本的距 離,得到其 $k$ 近鄰。
- 根據樣本不平衡比例設置一個采樣比例以確定采樣倍率 $\mathrm{N}$ ,對於每一個少數類樣本 $x_{i}$ ,從其 $k$ 近 鄰中隨機選擇若干個樣本,假設選擇的是 $\hat{x}_{i}$ 。
- 對於每一個隨機選出來的近鄰 $\hat{x}_{i}$ ,分別與 $x_{i}$ 按照如下公式構建新的樣本。
$x_{n e w}=x_{i}+\operatorname{rand}(0,1) \times\left(\hat{x}_{i}-x_{i}\right)$
我們用圖文表達的方式,再來描述一下SMOTE算法。
1).先隨機選定一個少數類樣本 $x_{i}$ 。
$x_{n e w}=x_{i}+\operatorname{rand}(0,1) \times\left(\hat{x}_{i}-x_{i}\right)$
2).找出這個少數類樣本 $x_{i}$ 的 $\mathrm{K}$ 個近鄰 $($ 假設 $\mathrm{K}=5) , 5$ 個近鄰已經被圈出。
3). 隨機從這 $K$ 個近鄰中選出一個樣本 $\hat{x}_{i}$ (用綠色圈出來了)。
4).在少數類樣本 $x_{i}$ 和被選中的這個近鄰樣本 $\hat{x}_{i}$ 之間的連線上,隨機找一點。這個點就是人工合成 的新的樣本點 (綠色正號標出)。
SMOTE算法摒棄了隨機過采樣復制樣本的做法,可以防止隨機過采樣中容易過擬合的問題,實踐證明此方法可以提高分類器的性能。但是SMOTE算法也存以下兩個缺點:
-
- 1)由於對每個少數類樣本都生成新樣本,因此容易發生生成樣本重疊的問題。
- 2)在SMOTE算法中,出現了過度泛化的問題,主要歸結於產生合成樣本的方法。特別是,SMOTE算法對於每個原少數類樣本產生相同數量的合成數據樣本,而沒有考慮其鄰近樣本的分布特點,這就使得類間發生重復的可能性增大。
- 解釋缺點2)的原因:結合前面所述的SMOTE算法的原理,SMOTE算法產生新的人工少數類樣本過程中,只是簡單的在同類近鄰之間插值,並沒有考慮少數類樣本周圍多數類樣本的分布情況。如3圖所示,綠色正號1、2分布在多數類樣本周圍,它們離多數類樣本最近,這就導致它們有可能被划分成多數類樣本。因此從3圖中可以看出,SMOTE算法的樣本生成機制存在一定的盲目性。
為了克服以上兩點的限制,多種不同的自適應抽樣方法相繼被提出,其中具有代表性的算法包括Borderline-SMOTE算法。
擴展閱讀:
Chawla N V, Bowyer K W, Hall L O, et al. SMOTE: synthetic minority over-sampling technique[J]. Journal of artificial intelligence research, 2002, 16: 321-357.
這篇論文提出了SMOTE算法。
Borderline-SMOTE算法介紹
對於Borderline-SMOTE算法最感興趣的就是用於識別少數類種子樣本的方法。在BorderlineSMOTE算法中,識別少數類種子樣本的過程如下:
1)首先,對於每個 $x_{i} \subset S_{\min }$, 確定一系列最近鄰樣本集,成該數據集為 $S_{i-K N N}$ ,且 $S_{i-K N N} \subset S$ 。
2)然后,對每個樣本 $x_{i}$ ,判斷出最近鄰樣本集中屬於多數類樣本的個數,即:
$\left|S_{i-K N N} \cap S_{m a j}\right|_{\circ}$
3)最后,選擇滿足下面不等式的 $x_{i}$ 。
$\frac{k}{2}<\left|S_{i-K N N} \cap S_{m a j}\right|<k$
上面式子表明,只有最近鄰樣本集中多數類多於少數類的那些 $x_{i}$ 才會被選中形成 "危險集" (DANGER)。因此,DANGER集中的樣本代表少數類樣本的邊界 (最容易被錯分的樣本)。然后對 DANGER集中使用 SMOTE 算法在邊界附近產生人工合成少數類樣本。
我們可以看出,如果 $\left|S_{i-K N N} \cap S_{m a j}\right|=k$ 。即: $x_{i}$ 的所有 $\mathrm{k}$ 個最近鄰樣本都屬於㧛類。如4 圖所示的樣本點C,我們就認為樣本點C是噪聲且它不能生成合成樣本。
通過上面的介紹,我們對Borderline-SMOTE算法有了一定的了解。為了讓大家理解的更透徹這個算法,我再給大家畫一個流程圖,詳細介紹一下。
流程圖5中,訓練樣本集為 $\mathrm{F}$ ,少數類樣本 $S_{\min }=\left\{f_{1}, f_{2}, \ldots, f_{n}\right\}$ 。
(i)計算少數類樣本集 $S_{\min }$ 中每一個樣本在訓練集F中的k個最近鄰。
(ii)然后,根據這 $\mathrm{k}$ 個最近鄰對 $S_{\min }$ 中的樣本進行歸類:
-
- 假設這 $\mathrm{k}$ 個最近鄰都是多數類樣本,則我們將該樣本定義為噪聲樣本,將它放在 $N_{\text {集合中。 }}^{\prime}$
- 反正k個最近鄰都是少數類樣本則該樣本是遠離分類邊界的,將其放入S集合中。
- 最后, $K$ 個最近鄰即有多數類樣本又有少數類樣本,則認為是邊界樣本,放入B集合中。
2)步驟二:
(i)設邊界樣本集 $B=\left\{f_{1}^{\prime}, f_{2}^{\prime}, \ldots, f_{n}^{\prime}\right\}$ ,計算B集合中的每一個樣本 $f_{i}^{\prime}, i=1,2, \ldots, n$ ,在 少數類樣本集 $S_{\min }$ 中的 $\mathrm{K}$ 個最近鄰,組成集合 $f_{i j}$ 。
(ii) 隨機選出 $s(1<s<n)$ 個最近鄰。
(iii)計算出它們各自與該樣本之間的全部屬性的差值 $d_{i j} 。 d_{i j}=f_{i}^{\prime}-f_{i j}, j=1,2, \ldots s$ 。
(iv) 然后乘以一個隨機數 $r_{i j}, r_{i j} \in(0,1)$ 。如果 $f_{i j}$ 是 $N^{\prime}$ 集合或 $S$ 集合中的樣本,則 $r_{i j} \in(0,0.5)$ 。
(v)最后生成的人工少數類樣本為: $h_{i j}=f_{i}^{\prime}+r_{i j} * d_{i j}, j=1,2, \ldots, s$ 。
3)步驟三:
重復步驟2的過程,直到生成人工少數類樣本的數目滿足要求,達到均衡樣本集的目的后結束算法。
擴展閱讀:
Han H, Wang W Y, Mao B H. Borderline-SMOTE: a new over-sampling method in imbalanced data sets learning[C]//International Conference on Intelligent Computing. Springer, Berlin, Heidelberg, 2005: 878-887.
這篇文章提出了Borderline-SMOTE算法。
2.3代價敏感學習(cost-sensitive learning)
(1)代價矩陣
采樣算法從數據層面解決不平衡數據的學習問題;在算法層面上解決不平衡數據學習的方法主要是基於代價敏感學習算法(Cost-Sensitive Learning)。
在現實任務中常會遇到這樣的情況:不同類型的錯誤所造成的后果不同。例如在醫療診斷中,錯誤地把患者診斷為健康人與錯誤地把健康人診斷為患者,看起來都是犯了“一次錯誤”,但是后者的影響是增加了進一步檢查的麻煩,前者的后果卻可能是喪失了拯救生命的最佳時機;再如,門禁系統錯誤地把可通行人員攔在門外,將使得用戶體驗不佳,但錯誤地把陌生人放進門內,則會造成嚴重的安全事故;在信用卡盜用檢查中,將正常使用誤認為是盜用,可能會使用戶體驗不佳,但是將盜用誤認為是正常使用,會使用戶承受巨大的損失。為了權衡不同類型錯誤所造成的不同損失,可為錯誤賦予“非均等代價”(unequal cost)。
代價敏感學習方法的核心要素是代價矩陣,如表1所示。其中 $\cos t_{i j}$ 表示將第 $\mathrm{i}$ 類樣本預測為第j類 樣本的代價。一般來說, $\operatorname{cost}_{i j}=0$ ;若將第 0 類判別為第1類所造成的損失更大,則 $\cos t_{01}>\operatorname{cost}_{10}$;損失程庴相差越大, $\cos t_{01}$ 與 $\cos t_{10}$ 的值差別越大。當 $\cos t_{01}$ 與 $\operatorname{cost}_{10}$ 相等時為代價不敏感的學習問題。
(2)代價敏感學習方法
基於以上代價敏感矩陣的分析,代價敏感學習方法主要有以下三種實現方式,分別是:
1).從學習模型出發,對某一具體學習方法的改造,使之能適應不平衡數據下的學習,研究者們針對不同的學習模型如感知機、支持向量機、決策樹、神經網絡等分別提出了其代價敏感的版本。以代價敏感的決策樹為例,可以從三個方面對其進行改造以適應不平衡數據的學習,這三個方面分別是決策閾值的選擇方面、分裂標准的選擇方面、剪枝方面,這三個方面都可以將代價矩陣引入。
2).從貝葉斯風險理論出發,把代價敏感學習看成是分類結果的一種后處理,按照傳統方法學習到一個模型,以實現損失最小為目標對結果進行調整,優化公式如下所示。此方法的優點在於它可以不依賴所用的具體分類器,但是缺點也很明顯,它要求分類器輸出值為概率。
$H(x)=\operatorname{argmin}\left(\sum_{j \in\{-,+\}} p(j \mid x) C(i, j)\right)$
3).從預處理的角度出發,將代價用於權重調整,使得分類器滿足代價敏感的特性,下面講解一種基於Adaboost的權重更新策略AdaCost算法。
(3)AdaCost算法
要想了解AdaCost算法,我們得先知道Adaboost算法,如圖6所示。Adaboost算法通過反復迭代,每一輪迭代學習到一個分類器,並根據當前分類器的表現更新樣本的權重,如圖中紅框所示,其更新策略為正確分類樣本權重降低,錯誤分類樣本權重增大,最終的模型是多次迭代模型的一個加權線性組合。分類越准確的分類器將會獲得越大的權重。
AdaCost算法修改了Adaboost算法的權重更新策略,其基本思想是對代價高的誤分類樣本大大地 提高其權重,而對於代價高的正確分類樣本適當地降低其權重,使其權重降低相對較小。總體思想 是代價高樣本權重增加得大降低的慢。其樣本權重按照如下公式進行更新。其中和 $\beta_{+}$分別表 示樣本被正確和錯誤分類情況下的 $\beta$ 的取值。
$D_{t+1}(i)=\frac{D_{t}(i) \exp \left(-\alpha_{t} h_{t}\left(x_{i}\right) y_{i} \beta_{i}\right)}{Z_{t}}$
$\beta_{+}=-0.5 C_{i}+0.5$
$\beta_{-}=0.5 C_{i}+0.5$
2.4不平衡學習的評價方法
(1)F1度量
(2)G-Mean
G-Mean是另外一個指標,也能評價不平衡數據的模型表現,其計算公式如下。
$G-$ Mean $=\sqrt{\frac{T P}{T P+F N}} \times \frac{T N}{T N+F P}$
(3)ROC曲線和AUC面積
我的這篇文章把ROC曲線和AUC面積分析的全面。ROC曲線和AUC面積可以很好的評價不平衡數據的模型表現。
3.如何選擇算法
(1)在正負樣本都非常少的情況下,應該采用數據合成的方式,例如:SMOTE算法和Borderline-SMOTE算法。
(2)在正負樣本都足夠多且比例不是特別懸殊的情況下,應該考慮采樣的方法或者是加權的方法。
『總結不易,加個關注唄!』