1. 程式人生 > >類不平衡問題與SMOTE過采樣算法

類不平衡問題與SMOTE過采樣算法

focus 英文 分享 能夠 目前 div -i n) macbookp

在前段時間做本科畢業設計的時候,遇到了各個類別的樣本量分布不均的問題——某些類別的樣本數量極多,而有些類別的樣本數量極少,也就是所謂的類不平衡(class-imbalance)問題。

本篇簡述了以下內容:

什麽是類不平衡問題

為什麽類不平衡是不好的

幾種解決方案

SMOTE過采樣算法

進一步閱讀

什麽是類不平衡問題

類不平衡(class-imbalance)是指在訓練分類器中所使用的訓練集的類別分布不均。比如說一個二分類問題,1000個訓練樣本,比較理想的情況是正類、負類樣本的數量相差不多;而如果正類樣本有995個、負類樣本僅5個,就意味著存在類不平衡。

在後文中,把樣本數量過少的類別稱為“少數類”。

但實際上,數據集上的類不平衡到底有沒有達到需要特殊處理的程度,還要看不處理時訓練出來的模型在驗證集上的效果。有些時候是沒必要處理的。

為什麽類不平衡是不好的

從模型的訓練過程來看

從訓練模型的角度來說,如果某類的樣本數量很少,那麽這個類別所提供的“信息”就太少。

使用經驗風險(模型在訓練集上的平均損失)最小化作為模型的學習準則。設損失函數為0-1 loss(這是一種典型的均等代價的損失函數),那麽優化目標就等價於錯誤率最小化(也就是accuracy最大化)。考慮極端情況:1000個訓練樣本中,正類樣本999個,負類樣本1個。訓練過程中在某次叠代結束後,模型把所有的樣本都分為正類,雖然分錯了這個負類,但是所帶來的損失實在微不足道,accuracy已經是99.9%,於是滿足停機條件或者達到最大叠代次數之後自然沒必要再優化下去,ok,到此為止,訓練結束!於是這個模型……

模型沒有學習到如何去判別出少數類。

從模型的預測過程來看

考慮二項Logistic回歸模型。輸入一個樣本 xx ,模型輸出的是其屬於正類的概率 y? y^ 。當 y? >0.5y^>0.5 時,模型判定該樣本屬於正類,否則就是屬於反類。

為什麽是0.5呢?可以認為模型是出於最大後驗概率決策的角度考慮的,選擇了0.5意味著當模型估計的樣本屬於正類的後驗概率要大於樣本屬於負類的後驗概率時就將樣本判為正類。但實際上,這個後驗概率的估計值是否準確呢?

從幾率(odds)的角度考慮:幾率表達的是樣本屬於正類的可能性與屬於負類的可能性的比值。模型對於樣本的預測幾率

y? 1?y? y^1?y^ 。

模型在做出決策時,當然希望能夠遵循真實樣本總體的正負類樣本分布:設 θθ 等於正類樣本數除以全部樣本數,那麽樣本的真實幾率θ1?θθ1?θ 。當觀測幾率大於真實幾率時,也就是 y? >θy^>θ 時,那麽就判定這個樣本屬於正類。

雖然我們無法獲悉真實樣本總體,但之於訓練集,存在這樣一個假設:訓練集是真實樣本總體的無偏采樣。正是因為這個假設,所以認為訓練集的觀測幾率 θ? 1?θ? θ^1?θ^ 就代表了真實幾率 θ1?θθ1?θ 。

所以,在這個假設下,當一個樣本的預測幾率大於觀測幾率時,就應該將樣本判斷為正類。

幾種解決方案

目前主要有三種辦法:

1. 調整 θθ 值

根據訓練集的正負樣本比例,調整 θθ 值。 ??

這樣做的依據是上面所述的對訓練集的假設。但在給定任務中,這個假設是否成立,還有待討論。

2. 過采樣

對訓練集裏面樣本數量較少的類別(少數類)進行過采樣,合成新的樣本來緩解類不平衡。

下面將介紹一種經典的過采樣算法:SMOTE。

3. 欠采樣

對訓練集裏面樣本數量較多的類別(多數類)進行欠采樣,拋棄一些樣本來緩解類不平衡。

SMOTE過采樣算法

??JAIR‘2002的文章《SMOTE: Synthetic Minority Over-sampling Technique》提出了一種過采樣算法SMOTE。概括來說,本算法基於“插值”來為少數類合成新的樣本。下面介紹如何合成新的樣本。

設訓練集的一個少數類的樣本數為 TT ,那麽SMOTE算法將為這個少數類合成 NTNT 個新樣本。這裏要求 NN 必須是正整數,如果給定的 N<1N<1 那麽算法將“認為”少數類的樣本數 T=NTT=NT ,並將強制 N=1N=1 。

考慮該少數類的一個樣本 ii ,其特征向量為 xi,i{1,...,T}xi,i∈{1,...,T} :

1. 首先從該少數類的全部 TT 個樣本中找到樣本 xixi 的 kk 個近鄰(例如用歐氏距離),記為 xi(near),near{1,...,k}xi(near),near∈{1,...,k} ;

2. 然後從這 kk 個近鄰中隨機選擇一個樣本 xi(nn)xi(nn) ,再生成一個 00 到 11 之間的隨機數 ζ1ζ1 ,從而合成一個新樣本 xi1xi1 :

xi1=xi+ζ1?(xi(nn)?xi)xi1=xi+ζ1?(xi(nn)?xi)

3. 將步驟2重復進行 NN 次,從而可以合成 NN 個新樣本:xinew,new1,...,Nxinew,new∈1,...,N。

那麽,對全部的 TT 個少數類樣本進行上述操作,便可為該少數類合成 NTNT 個新樣本。

技術分享圖片

如果樣本的特征維數是 22 維,那麽每個樣本都可以用二維平面上的一個點來表示。SMOTE算法所合成出的一個新樣本 xi1xi1 相當於是表示樣本 xixi 的點和表示樣本 xi(nn)xi(nn) 的點之間所連線段上的一個點。所以說該算法是基於“插值”來合成新樣本。

進一步閱讀

有兩篇翻譯自國外博客的文章:

解決真實世界問題:如何在不平衡類上使用機器學習?

從重采樣到數據合成:如何處理機器學習中的不平衡分類問題?

可以先讀中文的了解一下說了哪些事情,如果感興趣的話就去看英文原文來深入學習。

原文鏈接:https://www.cnblogs.com/Determined22/p/5772538.html

類不平衡問題與SMOTE過采樣算法