3

我有一個5000行的要素數據集,我想在其中進行二元分類。我有它2類載體:具有不平衡數據集問題的二進制分類

Y1 - 類是相當平衡的(0 - 52%/ 1- 48%)

Y2 - 類是非常不平衡(0 - 90%/ 1 - 10%)

我已經將數據集分成訓練集(4000個樣本)和測試集(1,000個樣本)。

於是,我寫了簡單的代碼來獲得一個數據集X和類矢量Y,並創建了一個平衡的數據集len = 2 X number of minority class

例如,在上面的訓練數據集中,使用90%/ 10%類矢量,將會有400 1和3200 0,因此它將創建一個新的800個樣本數據集, 400個隨機選擇的0類樣本,將被平衡。

因此,從一個4,000個樣本不平衡訓練集中,我得到一個800個樣本平衡數據集,並將其用於訓練學習算法。

然後,我使用在附加的1,000個樣本(測試集)上創建的模型。

我在兩個類向量上運行均衡代碼 - 均衡和不平衡的(即使我不需要它在平衡類向量中)。

當使用平衡類載體,我得到了1000的樣品測試集這混亂的矩陣:

[339 126 

288 246] 

    precision recall f1-score support 

0.0  0.54  0.73  0.62  465 
1.0  0.66  0.46  0.54  534 
avg/total 0.61 0.59 0.58 999 

當使用不平衡類載體,我得到了1000的樣品測試集這混亂的矩陣:

[574 274 

73 78] 

    precision recall f1-score support 

0.0  0.89  0.68  0.77  848 
1.0  0.22  0.52  0.31  151 
avg/total 0.79 0.65 0.70 999 

如您所見,等級1的精度非常低。

我還使用了包imbalanced-learn中的幾種算法來創建一個平衡的數據集(比如在採樣下,使用集羣質心或者使用SMOTE SVM進行過採樣),但結果總是相同的 - 類1的精度(少數階層)保持非常低的水平。

請問你能告訴你在這種情況下你會做什麼?我的目標是嘗試將不平衡類向量中的類1的精度提高到0.6左右,因爲它在平衡類向量中。

+0

我遇到過類似的情況,你有沒有想出任何解決方案? – Charlotte

回答

0

在你的地方,我會把比例更大的權重放在代表性不足的班級。 XGBoost提供了一套豐富的參數,您可以使用它來構建一個好的模型。 This article詳細討論了它們的Python。具體檢查參數scale_pos_weight

最重要的是,我還會考慮添加驗證集以評估模型的準確性。