處理樣本不均衡數據


處理樣本不均衡數據一般可以有以下方法:

1、人為將樣本變為均衡數據。

上采樣:重復采樣樣本量少的部分,以數據量多的一方的樣本數量為標准,把樣本數量較少的類的樣本數量生成和樣本數量多的一方相同。

下采樣:減少采樣樣本量多的部分,以數據量少的一方的樣本數量為標准。

 

2、調節模型參數(class_weigh,sample_weight,這些參數不是對樣本進行上采樣下采樣等處理,而是在損失函數上對不同的樣本加上權重)

(A)邏輯回歸中的參數class_weigh;

在邏輯回歸中,參數class_weight默認None,此模式表示假設數據集中的所有標簽是均衡的,即自動認為標簽的比例是1:1。所以當樣本不均衡的時候,我們可以使用形如{標簽的值1:權重1,標簽的值2:權重2}的字典來輸入真實的樣本標簽比例(例如{“違約”:10,“未違約”:1}),來提高違約樣本在損失函數中的權重

或者使用”balanced“模式,sklearn內部原理:直接使用n_samples/(n_classes * np.bincount(y)),即樣本總數/(類別數量*y0出現頻率)作為權重,可以比較好地修正我們的樣本不均衡情況。

 

(B)在SVM中使用SVC類的參數class_weigh和接口fit中可以設定的sample_weight:

SVC類的參數class_weigh:

對於class_weight,輸入形如{"標簽的值1":權重1,"標簽的值2":權重2}的字典,則不同類別的C將會自動被設為不同的值:

sklearn內部原理:標簽的值為1的C:權重1 * C,標簽的值為2的C:權重2*C 

或者,可以使用“balanced”模式,sklearn內部原理:這個模式使用y的值自動調整與輸入數據中的類頻率成反比的權重為 n_samples/(n_classes * np.bincount(y)

fit接口參數sample_weight:

參數形式:數組,結構為 (n_samples, ),則模型參數C則變為,每個樣本的權重 * C值,這樣迫使分類器強調權重更大的樣本。通常,較大的權重加在少數類的樣本上,以迫使模型向着少數類的方向建模


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM