樣本不平衡的處理方法

2021-10-19 22:17:08 字數 2436 閱讀 3403

樣本不平衡其實的主要思想就是過取樣和欠取樣,但是由於在複製少量標籤的樣本或者篩選大量標籤的樣本方法不同衍生出了不同的處理手段

1.隨機過取樣:複製標籤少的樣本使得好壞比滿足建模需要

2.隨機欠取樣:抽取標籤多的樣本使得好壞比滿足建模需要 (會丟失樣本資訊)

3.easyensemble:標籤多的樣本進行n份,每份都和標籤少的全部樣本組合成n份訓練樣本,利用整合學習訓練n個弱分類器(原**是用adaboost框架,當然用其他框架也是可以的)

4.balancecascade:對標籤多的樣本進行欠取樣,和標籤少的全部樣本組合成訓練樣本,弱分類器分類正確的標籤多數樣本不放回,分類錯誤的放回。

再進行標籤多的樣本欠取樣,訓練。

舉個例子吧。假設你有1000個標籤為1的樣本,10個標籤為0的樣本。

第一步,從1樣本中隨機抽取10個和10個0樣本組成訓練樣本

第二步,訓練弱分類器發現,10個1樣本中7個分類正確,3個分類錯誤。

第三步,將3個分類錯誤的1樣本放回原來的990個1樣本中。

重複第一步(這個時候抽樣的1樣本總樣本量為993個)

5. knn 欠抽樣:雖然有很多變種,其實思想是大同小異的。

5.1 nm欠取樣:有3個不同的方法

舉個栗子,假設你有1000個標籤為1的樣本,10個標籤為0的樣本

nearmiss-1就是每個1樣本去找到離他最近的3個0樣本(歐氏距離),計算平均距離。然後選取平均距離小的n個1樣本(滿足建模的好壞樣本比就可以)

nearmiss-2就是每個1樣本去找到離他最遠的3個0樣本,計算平均距離。選取平均距離最小的n個1樣本

nearmiss-3就是考慮每個0樣本,去找到距離0樣本最近的n個樣本,組成訓練樣本

可以熟悉下下面這個庫的使用

imblearn.under_sampling import nearmiss
5.2 濃縮最近鄰(condensed nearest neighbor(cnn))規則欠取樣

栗子還是那個栗子

第一步,保留全部標籤為0的樣本

第二步,基於所有1樣本和0樣本對1樣本進行knn(k=1)訓練

第三步,保留分類錯誤的1樣本

第四步,全部0樣本和分類錯誤的1樣本組成取樣後的樣本

這樣會讓0,1樣本比較接近的樣本放在一起,有利於進行邊界決策,距離太遠就不用考慮啦,要是能訓練出區分這些比較接近的樣本的模型才是重點。

5.3 tomek鏈結的欠取樣

cnn欠取樣的變種,目的是清除邊界上的樣本,一些分布非常相似但是標籤模稜兩可的樣本

(i)例項a的最近鄰居是b,(ii)例項b的最近鄰居是a,並且(iii)例項a和b屬於不同的類,則例項a和b定義tomek鏈結

將有tomek鏈結的樣本刪除組成訓練樣本

tomek的目的是剔除邊界上的樣本,但是並不是乙個特別好用的欠取樣技術,一般是結合其他欠取樣方法如cnn使用(oss單面選擇欠取樣)

5.4 編輯最近鄰(edited nearest neighbors (enn))規則欠取樣

也是乙個腦洞非常神奇的取樣設計,目的是剔除邊界樣本

先用k=3對1樣本進行分類,將分類錯誤的1樣本剔除,再結合cnn(k=1)取樣

5.5 欠取樣的鄰居清潔規則(ncr)

其實就是先用cnn再用enn

參考文獻

總結一下

knn進行欠取樣其實關注的就是兩個點

1. 清除離邊界很遠的冗餘樣本

2.清除離邊界很近的模糊樣本

6. smote演算法過取樣

不複雜,對於0樣本找到最近的0樣本,或者隨機最近的n個0樣本中的乙個

然後對於兩個0樣本x差值中間隨機選乙個值生成新的0樣本

比如 0樣本1的 x1 = 1 , 0樣本1的x1 = 4

那麼生成的0樣本 x1 = (4-1) * rand(0,1) + 1

保證生成的0樣本的x取值在兩個樣本之間就可以了

7.borderline-smote演算法

smote演算法的一種優化,對於哪些0樣本選取作為基準來進行生成新的0樣本

如果說0樣本周圍k個樣本中50%以上都是1樣本,而且不是100%都是1樣本(如果100%的話會被認為是雜訊),就選取這個0樣本進行smote插值

參考文獻:

8. kmeans過取樣

第一步,對1樣本和0樣本分別進行kmeans聚類

第二步,對於樣本少的類別進行過取樣(解決內部不平衡問題)

第三步,對於1樣本和0樣本進行過取樣(解決樣本標籤不平衡問題)

樣本不平衡問題

樣本不平衡是指 不同類別的樣本差別比較大,比如說正類和負類的樣本比例為50 1。處理樣本不平衡的原因 一般而已,如果類別不平衡比例超過4 1,那麼其分類器會大大地因為資料不平衡性而無法滿足分類要求的。因此在構建分類模型之前,需要對分類不均衡性問題進行處理。在前面,我們使用準確度這個指標來評價分類質量...

keras中處理樣本不平衡

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

樣本不平衡的處理方式

來自 宋天龍 python資料分析與資料化運營 以下內容比較簡陋,方便日後翻閱。樣本不平衡怎麼辦?1.過取樣 欠取樣 2.調節樣本的權重 3.組合或整合的方法 1.匯入資料 import pandas as pd from imblearn.over sampling import smote 過抽...