數據不平衡問題

數據不平衡問題

數據不平衡問題實際上指的就是y的分佈相差很大的問題,又稱爲類別不平衡問題。出現這種問題的原因是在實際取樣中,有可能會出現一類的y數量遠遠大於另一類的例子。

一個很明顯的例子就是在做信用卡還款預測的時候,一定是按時還款的人佔據絕大多數,不按時還款的人佔一小部分,那如果機器無腦預測新客戶一定會還款,正確率是很高的,但是這樣的預測顯然不是我們想要的。那麼如何解決這種類型的問題呢?不僅從樣本取樣的方式要變,最終模型評價的方式也有可能有所不同:

樣本取樣

欠採樣

欠採樣(undersampling),顧名思義,就是將數量大的那一個類別做一些刪除的操作,使得樣本數多的類別來迎合樣本數少的那一類。具體方法有以下幾種:

隨機欠採樣

我們可以隨機地刪除樣本數多的那一類中的數據,但是這樣就顯得很不專業了,因爲很明顯,我們不知道我們刪除的那些例子是不是一些很重要的例子,要是真的隨機刪除它們的話,模型的效果就可想而知了。於是就有了一些改進的算法。

EasyEnsamble算法

具體思路爲:
1. 從樣本多的類別中抽取和樣本少的類別一樣的樣本數;
2. 不重複地從樣本多的類別中取多次,並和樣本少的類別一起組成一對對的訓練集的組合;
3. 針對每個組合進行模型訓練,這樣能使多樣本類別的所有數據都有機會參與建模;
4. 將得到的分類器做模型的集成或者融合。

BalanceCascade算法

  1. 先通過一次隨機的欠採樣產生一個基分類器;
  2. 放棄分類器正確的樣本,從總樣本中繼續抽取新樣本數據進入訓練數據;
  3. 繼續進行訓練並重復。

*這種方式的思路其實就是增加分類錯誤樣本的權重,和AdaBoost的思路十分相似

過採樣

既然有樣本數多的類別來迎合樣本數少的類別,那麼就一定有相反的方法,我們稱之爲過採樣(oversampling)。其目的是增加少樣本類別的數據而達到平衡的狀態。

簡單的複製粘貼

這種方法是不可能被採用的,因爲這種簡單複製的方法會導致過擬合的發生。我們必須尋找其他的算法來解決這個問題。

SMOTE

總體思路是利用少樣本類別在其特徵空間有相似性,那麼我們就可以在其周圍合成新的樣本數據。
1. 針對少樣本類別的每一個樣本,找到其K個近鄰,這裏的K值由人工確定;
2. K近鄰的個數由兩種樣本的差別而定;
3. 計算少樣本和其近鄰在特徵空間中的差值,然後將這個差值乘以一個(0,1)之間的隨機數後,與當前樣本特徵值相加,作爲新的合成樣本。

*最後一步的數學表達式爲:xnew=x+random(0,1)(x^x)

當然SMOTE算法也有其自身的問題,一個是會有同類之間數據重疊的情況出現,因爲樣本數據空間本來就很小,在這些狹小的空間另外生成新的數據點的話很難避免數據重疊;另一個是生成的一些新的合成樣本有可能不包含任何有用的信息。於是針對這些情況,還有下面的改進算法:

Borderline-SMOTE

Borderline-SMOTE算法相比SMOTE算法就是多了一個邊界確認的步驟,針對SMOTE數據重疊的情況,Borderline-SMOTE算法對需要拓展的少數類樣本進行了篩選,篩選條件就是是否是處於多數類樣本和少數類樣本空間的邊界上(borderline)。

具體步驟爲:
1. 計算少數類樣本中每一個樣本的在整個訓練集中和其他所有樣本的距離,並獲得其K個近鄰;
2. 對其K近鄰進行歸類,確定其是否處於邊界(通過k中兩種樣本的個數多少來確定);
3. 對確定爲邊界的樣本使用SMOTE算法進行拓展。

轉化爲一分類問題或者異常點檢測問題

這是完全另一套思路,不把原先二分類的問題看作是二分類的問題,把它當做一分類問題(經典如one class SVM)或者異常點檢測問題(把少樣本的數據點當做異常點進行識別)。

One Class SVM

正常的二分類SVM主要思想都是確定樣本點是A類還是B類,而一分類主要思路是確定樣本點是A類和不是A類。雖然對某一個樣本點來說是B類就意味着不是A類,但是對於分類器來說,它並沒有學習B類,只學習了A類。

模型評價

在數據不平衡的情況下,模型評價的方式也有所不同。

根據最開始舉的例子,正確率是不能夠準確評價模型好壞的。

但是準確率(P)和召回率(R),一起F1值還是可以準確評價的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章