機器學習中樣本不平衡的處理方法

2021-10-20 20:16:46 字數 2061 閱讀 2123

過取樣閾值移動

在現實收集的樣本中,正負類別不均衡是現實資料中很常見的問題。乙個分類器往往 accuracy 將近90%,但是對少數樣本的判別的 recall 卻只有10%左右。這對於我們正確找出少數類樣本非常不利。

一般而言,正負樣本比例超過1:3,分類器就已經會傾向於負樣本的判斷(表現在負樣本recall過高,而正樣本 recall 低,而整體的 accuracy依然會有很好的表現)。在這種情況下,我們可以說這個分類器是失敗的,因為它沒法實現我們對正類人群的定位。

在乙個極度不平衡的樣本中,由於機器學習會每個資料進行學習,那麼多數資料樣本帶有的資訊量比少數樣本資訊量大,會對分類器學習過程中造成困擾。舉例來說,假如有100個樣本,其中只有1個是正樣本,其餘99個全為負樣本,那麼學習器只要制定乙個簡單的方法:所有樣本均判別為負樣本,就能輕鬆達到99%的準確率。而這個分類器的決策很明顯並非是我們想要的判定標準。

以下樣本平衡方案雖然很容易想到,但是實際操作的過程中總是很難實現,因為無論是任何縮放,都會影響「訓練集是樣本總體的無偏取樣」這個假設前提,即我們不能基於訓練資料的觀察來推測真實情況中的真實機率。現採用的方法有以下3種:

欠取樣(undersampling)法是去除訓練集內一些多數樣本,使得兩類資料量級接近,然後在正常進行學習

這種方法的缺點是就是放棄了很多反例,這會導致平衡後的訓練集小於初始訓練集。而且如果取樣隨機丟棄反例,會損失已經收集的資訊,往往還會丟失重要資訊。

但是我們可以更改抽樣方法來改進欠抽樣方法,比如把多數樣本分成核心樣本和非核心樣本,非核心樣本為對**目標較低概率達成的樣本,可以考慮從非核心樣本中刪除而非隨機欠抽樣,這樣保證了需要機器學習判斷的核心樣本資料不會丟失。

舉例來說依然是**使用者註冊這個目標,我們可以將跳出率為100%的使用者名稱下的所有會話都可以劃分為非核心樣本,因為跳出使用者包含的資訊量非常少(其他行為特徵為空),將此部分使用者樣本排除可以最大可能的保留更多原始資料資訊。

另外一種欠取樣的改進方法是 easyensemble 提出的繼承學習制度,它將多數樣本劃分成若 n個集合,然後將劃分過後的集合與少數樣本組合,這樣就形成了n個訓練集合,而且每個訓練結合都進行了欠取樣,但從全域性來看卻沒有資訊丟失。

過取樣(oversampling)是對訓練集內的少數樣本進行擴充,既增加少數樣本使得兩類資料數目接近,然後再進行學習。

簡單粗暴的方法是複製少數樣本,缺點是雖然引入了額外的訓練資料,但沒有給少數類樣本增加任何新的資訊,非常容易造成過擬合。

通過抽樣方法在少數類樣本中加入白雜訊(比如高斯雜訊)變成新樣本一定程度上可以緩解這個問題。如年齡,原年齡=新年齡+random(0,1)

smote[chawla et a., 2002]是通過對少數樣本進行插值來獲取新樣本的。比如對於每個少數類樣本a,從 a最鄰近的樣本中選取 樣本b,然後在 ab 中隨機選擇一點作為新樣本。

這類方法的中心思想不是對樣本集和做再平衡設定,而是對演算法的決策過程進行改進。

舉個簡單的例子,通常我們對**結果進行分類時,當** y

yy(y

yy 代表正類可能性)值 >

0.5>0.5

>0.

5 時,判定**結果為正,反之為負。

規定決策規則:

若 y 1−

y>

1\frac>1

1−yy

​>

1 ,則**為正例

不難發現,只有當樣本中正反比例為1:1時,閾值設定為0.5才是合理的。如果樣本不平衡決策規則需要進行變更,令 m

+m^+

m+代表正例個數,m

−m^-

m−代表負例個數,改進決策規則:

若 y 1−

y>m+

m−

\frac>\frac

1−yy

​>m−

m+​,則**為正例

因為訓練集是總體樣本的無偏取樣,觀測機率就代表真實機率,決策規則中 m+m

\frac

mm+​

代表樣本中正例的觀測機率,只要分類器中的**機率高於觀測機率達到改進判定結果的目標。

樣本不平衡的處理方法

樣本不平衡其實的主要思想就是過取樣和欠取樣,但是由於在複製少量標籤的樣本或者篩選大量標籤的樣本方法不同衍生出了不同的處理手段 1.隨機過取樣 複製標籤少的樣本使得好壞比滿足建模需要 2.隨機欠取樣 抽取標籤多的樣本使得好壞比滿足建模需要 會丟失樣本資訊 3.easyensemble 標籤多的樣本進行...

機器學習之樣本不平衡

1.樣本不平衡導致什麼問題?在機器學習的分類問題中,以二分類為例,如果訓練集合的正例和負例的樣本不平衡,相差懸殊很大。比如針對這個不平衡的訓練結合運用邏輯回歸的時候,一般來說,邏輯回歸的閾值0 1,常取0.5,當樣本不平衡時,採用預設的分類閾值可能會導致輸出全部為反例,產生虛假的高準確度,導致分類失...

keras中處理樣本不平衡

參考文獻 兩者的區別為 class weight 主要針對的上資料不均衡問題,比如 異常檢測的二項分類問題,異常資料僅佔1 正常資料佔99 此時就要設定不同類對loss的影響。sample weight 主要解決的是樣本質量不同的問題,比如前1000個樣本的可信度,那麼它的權重就要高,後1000個樣...