[英]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進行欠采樣,我的步驟如下:
將數據集隨機分成比例為 7:3 的訓練和測試集(因此 1050 用於訓練,450 用於測試。)
現在訓練集有大約 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) 我的步驟有效嗎? 我首先拆分訓練/測試,然后對訓練集的多數類進行欠采樣。
您應該拆分train
和test
以便在兩者中保持類平衡。 如果在整個數據集中的比率為6.5:1
則train
和test
應該相同。
是的,您應該在欠采樣之前將其拆分(無需對test
進行欠采樣),只需記住監控多個指標(例如f1 score
、 recall
、 precision
已經提到過,您應該對這些指標沒問題),因為您在不同的分布上進行訓練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.