關於交叉驗證的問題
嗨,
想問有一組資料集,target 0 , 1 的數目相差甚大( target0 僅佔 8%左右)。我在交叉驗證時,傾向的做法是:先將原始資料集經過初步的整體分成 targe 0:target = 5:5, 然後再進行10-folder validation。但我有個疑問想要釐清:
1. k-folder validation的優點是可以增加訓練資料,且每筆資料都有經過訓練,降低偏誤(抽樣抽到某一性質特別多的樣本)的產生。然而我一開始把targe 0:target1分成5:5,就已經將部分樣本,經過隨機篩選機制篩選掉的,這樣的處理,並沒有滿足減少偏誤的目標(稀釋了k-folder的優勢)。有沒有其他更好的處理方式?
回答列表
-
2019/10/09 上午 11:53陳明佑 (Ming You Chen)贊同數:1不贊同數:0留言數:1
同學你問得很好, 這個在機器學習競賽中確實是很常見的問題
以你的 case 來說, balance 0 : 1 = 5 : 5,
就等於已經把 target=1 的資料排除掉 84% 了
這樣做 10 fold 的時候, 會重複抽到被選到的 8% 的 target=1, 其他等於沒抽到
所以以你的需求, 比較合理的做法是 :
取N次(次數可以調整) resample 的 %8 target=1 (當然每次 random_state 要設得不同)
每次的調參不要太多 fold (2 or 3即可), 然後這樣 N 次的模型做集成,
這樣 target=1 的 case 就可能被你抽到樣本中, 不會漏訓練到
雖然說 target=0 的 case 被重複觀察了, 但這也是不平衡資料無法避免的
而且取不同子集合作模型, 本身就是集成中 Bagging 的用法
-
2019/10/10 上午 01:38張維元 (WeiYuan)贊同數:0不贊同數:0留言數:2
「這樣聽起來,是不是我可以乾脆把資料數目較少的target 0 以 over sampling 的方式,增加到和target 1 的數目一樣,然後一樣是用10 folder validation 去驗證呢?」
=> 其實你的問題比較像是「怎麼處理 imbalance 資料的問題」,好像跟 交叉驗證 無關?建議可以找找看不同的方向?
另外我想問問的是你原問題中的「k-folder validation的優點是可以增加訓練資料」的原因是怎麼理解的?
-
2019/10/11 下午 02:47陳明佑 (Ming You Chen)贊同數:1不贊同數:0留言數:1
這樣聽起來,是不是我可以乾脆把資料數目較少的target 0 以 over sampling 的方式,增加到和target 1 的數目一樣,然後一樣是用10 folder validation 去驗證呢?
這個問題我有想過並實驗過
結果你會發現, target 0 因為 resample 後, 複製了好幾份
所以在後續的 cross validation 中, 複製的資料往往會在 train 與 test 都出現
因此導致嚴重的 overfit, 不只對 1 沒預測力, 對 0 也沒預測力了
有不同想法雖好, 但切記一定要用程式碼驗證過
不然會走到錯誤的方向去