前言

在分類任務時,訓練資料中的類別不平衡是一個非常常見的問題,稱為資料的

類別不平衡(Class Imbalance)

,或叫做

資料偏斜(Class skew)

,在訓練資料類別不平衡的情況下是很難學習出一個效果較好的分類器的,例如:在病例檢測專案中,需要依據輸入的訓練資料特徵去判別是否為罹患疾病的樣本的應用場景,在這應用場景下正樣本(罹患疾病)的數量基本上是小於負樣本(健康)的。那在這個情況下該如何調整訓練集使得模型最終能學出一個比較好的效果便是我們要處理的問題。

本文

在這邊我們直接從實際的案例中觀察資料分佈並檢視類別不平衡的情況。

連結:

https://

pan。baidu。com/s/1eYDM0g

-sh9ZXxo249jY0Hg

密碼: jf4v

上面連結為一新聞文字分13分類的訓練集,並已經將字元編碼成索引形式,但主辦方沒有提供對應的字元編碼字典,所以僅用這份資料來看資料類別不平衡分佈狀況使用。

檢視資料情況

透過pandas匯入資料並檢視前5個數據。

第三集 - 如何處理分類任務中資料不平衡問題

2。 分析文字長度的分佈

第三集 - 如何處理分類任務中資料不平衡問題

3。 將長度分佈以直方圖的方式表示

第三集 - 如何處理分類任務中資料不平衡問題

4。 檢視各類別的分佈情況,可以看到的是第0類、第1類、第2類多過第11類、第12類、第13類很多,資料有類別不平衡的狀況。

第三集 - 如何處理分類任務中資料不平衡問題

後續來討論一下面對類別不平衡的資料時有哪些常見的處理方法。

自資料集情況下手

在深度學習中也是需要處理類別不平衡問題的,不然會容易有指標不準確的問題,而在處理方法上也與機器學習領域類似,而在分類問題上可以使用混淆矩陣(confusion matrix)來分析模型執行的情況。

而為了對抗類別不平衡的問題,不一定非得重新制作資料集,而是可以採用底下的方法去增加模型識別的能力:

欠取樣:減少大類別的樣本數,使各個類別數量差不多。

過取樣:以複製方式增加小類別樣本數,使小類別數量上升。

資料合成:自小類別中組合創造出新的合成點,使小類別數量上升。

但無論選擇哪一個方法,其目的都是為了重新平衡資料集中的各類別。

自目標函式下手

因為指標不準確的問題點在於:就算輸入樣本是小類別,將其判斷錯誤也會因為其總體數量不多而導致準確率仍非常高的情況發生,所以除了從資料集分佈的問題上根本解決問題之外,也可以基於目標函式與訓練方法上進行修改以增加對小樣本的判別準確率,其方法如下:

類別加權:增加在錯誤預測小樣本時的損失成本。

小結

雖深度學習領域與機器學習領域相比下無需考慮過多的特徵工程問題,但還是仍需考慮在資料集中各個類別樣本不均衡的問題,而在面對類別不均衡問題時,業界中較常使用的處理方式仍是對資料集情況進行調整。