logo
Loading...

關於交叉驗證的問題 - Cupoy

嗨,想問有一組資料集,target 0 , 1 的數目相差甚大( target0 僅佔 8%左右)。...

ml100-2,ml100-2-d06

關於交叉驗證的問題

2019/10/08 下午 02:24
機器學習共學討論版
doris
觀看數:34
回答數:3
收藏數:0
ml100-2
ml100-2-d06

嗨,

想問有一組資料集,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 也沒預測力了


    有不同想法雖好, 但切記一定要用程式碼驗證過

    不然會走到錯誤的方向去