簡體   English   中英

在對多數類進行欠采樣后,讓訓練集 < 測試集是否可行?

[英]Is it feasible to have the training set < the test set after undersampling the majority class?

我有一個包含 1500 條記錄的數據集,其中有兩個不平衡的類。 0 類是 1300 條記錄,而 1 類是 200 條記錄,因此 ard 的比率為 6.5:1。

我用這個數據集構建了一個隨機森林進行分類。 我從過去的經驗中知道,如果我使用整個數據集,召回率非常低,這可能是由於類不平衡造成的。

所以我決定對Class 0進行欠采樣,我的步驟如下:

  1. 將數據集隨機分成比例為 7:3 的訓練和測試集(因此 1050 用於訓練,450 用於測試。)

  2. 現在訓練集有大約 900 類 0 類數據 ~100 類數據。我聚集了大約 900 類 0 類數據,並將其(按比例)欠采樣到 ~100 條記錄。

所以現在訓練集 ~100 Class 0 + ~100 Class 1 = 總共 ~200 條記錄,而測試集總共有 70 Class 0 + 380 Class 1 = 450 條記錄。

我的問題來了:

1) 我的步驟有效嗎? 我首先拆分訓練/測試,然后對訓練集的多數類進行欠采樣。

2) 現在我的訓練集 (~200) < 測試集 (450)。 是否有意義?

3)性能仍然不是很好。 准確率為 0.34,召回率為 0.72,f1 分數為 0.46。 有什么辦法可以改善嗎? 我應該使用簡歷嗎?

非常感謝您的幫助!

1) 我的步驟有效嗎? 我首先拆分訓練/測試,然后對訓練集的多數類進行欠采樣。

您應該拆分traintest以便在兩者中保持類平衡 如果在整個數據集中的比率為6.5:1traintest應該相同。

是的,您應該在欠采樣之前將其拆分(無需對test進行欠采樣),只需記住監控多個指標(例如f1 scorerecallprecision已經提到過,您應該對這些指標沒問題),因為您在不同的分布上進行訓練test

2) 現在我的訓練集 (~200) < 測試集 (450)。 是否有意義?

是的,它確實。 您還可以對訓練數據集進行oversampling (例如,隨機重復minority類以匹配來自majority的示例數量)。 在這種情況下,您也必須先拆分,否則您可能會用training樣本破壞您的test集,這甚至是災難性的。

3)性能仍然不是很好。 准確率為 0.34,召回率為 0.72,f1 分數為 0.46。 有什么辦法可以改善嗎? 我應該使用簡歷嗎?

這取決於具體問題,我會怎么做:

  • oversampling而不是undersampling ——神經網絡需要大量數據,你現在沒有很多樣本
  • 嘗試其他非RandomForest算法(如果你有很多特征,也許SVM ?否則RandomForest也可能是一個不錯的選擇)
  • 否則微調您的神經網絡(特別關注learning rate ,如果有時間,請使用 CV 或相關方法)
  • 如果手頭的任務可用,嘗試使用一些預訓練的神經網絡

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM