在現實收集的樣本中,正負類別不均衡是現實數據中很常見的問題。一個分類器每每 Accuracy 將近90%,可是對少數樣本的判別的 Recall 卻只有10%左右。這對於咱們正確找出少數類樣本很是不利。算法
舉例來講:在一波新手推薦的活動中,預測用戶是否會註冊的背景下,不註冊的用戶每每是居多的,這個正負比例一般回事1:99甚至更大。通常而言,正負樣本比例超過1:3,分類器就已經會傾向於負樣本的判斷(表如今負樣本Recall太高,而正樣本 Recall 低,而總體的 Accuracy依然會有很好的表現)。在這種狀況下,咱們能夠說這個分類器是失敗的,由於它無法實現咱們對正類人羣的定位。dom
在一個極度不平衡的樣本中,因爲機器學習會每一個數據進行學習,那麼多數數據樣本帶有的信息量比少數樣本信息量大,會對分類器學習過程當中形成困擾。舉例來講,假若有100個樣本,其中只有1個是正樣本,其他99個全爲負樣本,那麼學習器只要制定一個簡單的方法:全部樣本均判別爲負樣本,就能輕鬆達到99%的準確率。而這個分類器的決策很明顯並不是是咱們想要的斷定標準。機器學習
如下樣本平衡方案雖然很容易想到,可是實際操做的過程當中老是很難實現,由於不管是任何縮放,都會影響「訓練集是樣本整體的無偏採樣」這個假設前提,即咱們不能基於訓練數據的觀察來推測真實狀況中的真實概率。現採用的方法有如下3種:學習
欠採樣(undersampling)法是去除訓練集內一些多數樣本,使得兩類數據量級接近,而後在正常進行學習orm
這種方法的缺點是就是放棄了不少反例,這會致使平衡後的訓練集小於初始訓練集。並且若是採樣隨機丟棄反例,會損失已經收集的信息,每每還會丟失重要信息。繼承
欠採樣改進方法1form
可是咱們能夠更改抽樣方法來改進欠抽樣方法,好比把多數樣本分紅核心樣本和非核心樣本,非核心樣本爲對預測目標較低機率達成的樣本,能夠考慮從非核心樣本中刪除而非隨機欠抽樣,這樣保證了須要機器學習判斷的核心樣本數據不會丟失。
舉例來講依然是預測用戶註冊這個目標,咱們能夠將跳出率爲100%的用戶名下的全部會話均可以劃分爲非核心樣本,由於跳出用戶包含的信息量很是少(其餘行爲特徵爲空),將此部分用戶樣本排除能夠最大可能的保留更多原始數據信息。class
欠採樣改進方法2rsa
另一種欠採樣的改進方法是 EasyEnsemble 提出的繼承學習制度,它將多數樣本劃分紅若 N個集合,而後將劃分事後的集合與少數樣本組合,這樣就造成了N個訓練集合,並且每一個訓練結合都進行了欠採樣,但從全局來看卻沒有信息丟失。方法
過採樣(oversampling)是對訓練集內的少數樣本進行擴充,既增長少數樣本使得兩類數據數目接近,而後再進行學習。
簡單粗暴的方法是複製少數樣本,缺點是雖然引入了額外的訓練數據,但沒有給少數類樣本增長任何新的信息,很是容易形成過擬合。
過採樣改進方法1
經過抽樣方法在少數類樣本中加入白噪聲(好比高斯噪聲)變成新樣本必定程度上能夠緩解這個問題。如年齡,原年齡=新年齡+random(0,1)
過採樣表明算法:SMOTE 算法
SMOTE[Chawla et a., 2002]是經過對少數樣本進行插值來獲取新樣本的。好比對於每一個少數類樣本a,從 a最鄰近的樣本中選取 樣本b,而後在對 ab 中隨機選擇一點做爲新樣本。
閾值移動
這類方法的中心思想不是對樣本集和作再平衡設置,而是對算法的決策過程進行改進。
舉個簡單的例子,一般咱們對預測結果進行分類時,當預測 ( 表明正類可能性) 值>0.5時,斷定預測結果爲正,反之爲負。規定決策規則
若>1,則預測爲正例
不難發現,只有當樣本中正反比例爲1:1時,閾值設置爲0.5纔是合理的。若是樣本不平衡決策規則須要進行變動,另 表明正例個數, 表明負例個數,改進決策規則:
若 ,則預測爲正例
由於訓練集是整體樣本的無偏採樣,觀測概率就表明真實概率,決策規則中 表明樣本中正例的觀測概率,只要分類器中的預測概率高於觀測概率達到改進斷定結果的目標。