刁鑽數據的處理(處理不平衡數據)

不平衡數據分類學習

一、 不平衡數據的出現場景

搜索引擎的點擊預測

  • 點擊的網頁往往佔據
    很小的比例
  • 電子商務領域的商品推薦
  • 推薦的商品被購買的
    比例很低
  • 信用卡欺詐檢測
  • 網絡攻擊識別

  • 在這裏插入圖片描述

二、 解決方案

2.1 從數據的角度:抽樣,從而使得數據相對均衡

  • 隨機欠採樣:從多數類中隨機選擇少量樣本再合併原有少數類樣本作爲新的訓練數據集
    1. 有放回採樣
    2. 無放回採樣
    3. 會造成一些信息缺失,選取的樣本可能有偏差
  • 隨機過採樣:隨機複製少數類來樣本
    1. 擴大了數據集,造成模型訓練複雜度加大,另一方 面也容易造成模型的過擬合問題

2.2 從算法的角度:考慮不同誤分類情況代價的差異性對算法進行優化

  • EasyEnsemble算法:
  1. 對於多數類樣本,通過n次有放回抽樣生成n份子集
  2. 少數類樣本分別和這n份樣本合併訓練一個模型:n個模型
  3. 最終模型:n個模型預測結果的平均值
  • BalanceCascade(級聯)算法:
  1. 從多數類中有效地選擇一些樣本與少數類樣本合併爲新的數據集進行訓練
  2. 訓練好的模型每個多數類樣本進行預測。若預測正確,則不考慮將其作爲 下一輪的訓練樣本
  3. 依次迭代直到滿足某一停止條件,最終的模型是多次迭代模型的組合
  • SMOTE: Synthetic Minority Over-sampling Technique

設訓練集的一個少數類的樣本數爲 T ,那麼SMOTE算法將爲這個少數類合成 NT 個新樣本。這裏要求 N必須是正整數,如果給定的 N<1 那麼算法將“認爲”少數類的樣本數 T=NT ,並將強制 N=1。 考慮該少數類的一個樣本 i ,其特徵向量爲 xi,i∈{1,…,T}:

  1. 首先從該少數類的全部 T個樣本中找到樣本 xi 的 k 個近鄰(例如用歐氏距離),
    記爲 xi(near),near∈{1,…,k}
  2. 然後從這 k 個近鄰中隨機選擇一個樣本 xi(n) ,再生成一個 0 到 1之間的
    隨機數ζ1,從而合成一個新樣本 xi1 :在這裏插入圖片描述
  3. 將步驟2重複進行 N 次,從而可以合成 NN個新樣本:xinew,new∈1,…,N.
    那麼,對全部的 T個少數類樣本進行上述操作,便可爲該少數類合成 NT 個新樣本。

SMOTE算法摒棄了隨機過採樣複製樣本的做法,可以防止隨機過採樣易過擬合的問題。實踐證明此方法可以提高分類器的性能。SMOTE 對高維數據不是很有效。當生成合成性實例時,SMOTE 並不會把來自其他類的相鄰實例考慮進來,這導致了類重疊的增加,並會引入額外的噪音。爲了解決SMOTE算法的這一缺點提出一些改進算法,如Borderline-SMOTE算法

  • 代價敏感學習

基於代價矩陣分析,代價敏感學習方法主要有以下三種實現方式:

  • 從貝葉斯風險理論出發,把代價敏感學習看成是分類結果的一種後處理,按照傳統方法學習到一個模型,以實現損失最小爲目標對結果進行調整
  1. 不依賴所用具體的分類器
  2. 但是缺點要求分類器輸出值爲概率
  • . 從學習模型出發,對具體學習方法的改造,使之能適應不平衡數據下的學習
    1. 代價敏感的支持向量機,決策樹,神經網絡
  • 從預處理的角度出發,將代價用於權重的調整,使得分類器 滿足代價敏感的特性

三、Scikit learn中的不均衡樣本分類處理

3.1 類別權重class_weight

class_weight參數用於標示分類模型中各類別樣本的權重

  • 不考慮權重,即所有類別的權重相同
  • balanced:自動計算類別權重
    1. 某類別的樣本量越多,其權重越低;樣本量越少,則權重越高
    2. 類權重計算方法爲:n_samples / (n_classes * np.bincount(y))
      nsamplesnclassesnp.bincount(y) n_{samples}爲樣本數,n_{classes}爲類別數量,np.bincount(y) 輸出每個類的樣本數
  • 手動指定各個類別的權重
    1. 如對於0,1二類分類問題,可以定義class_weight={0:0.9, 1:0.1},即類別0的權重爲90%,而類別1的權重爲10%

3.2 樣本權重sample_weight

模型訓練:fit(X, y, sample_weight=None)

  • 其中參數sampleweightsample_{weight}爲樣本權重參數
    當樣本高度失衡時,樣本不是總體樣本的無偏估計,可能導致模型預測能力下降
  • 解決方案:調節樣本權重
    • 一種是在classweightclass_{weight}使用balanced
    • 另一種是在調用fit函數時,通過sampleweightsample_{weight}來調節每個樣本權重
    • 如果兩種方法都用了,那麼樣本的真正權重是classweightsampleweightclass_{weight}*sample_{weight}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章