推 sma1033: 原因應該很簡單,你的val_dataset有很高比例被包在train_03/06 08:33
→ sma1033: dataset底下,也就是train的時候會吃到和val_dataset相近03/06 08:33
→ sma1033: 的資料,而val_dataset的多樣性又比train_dataset低所致03/06 08:34
→ sma1033: 假設code沒問題,test慘的原因單純就是「資料太不一樣」03/06 08:36
→ sma1033: 你可能分資料的時候,sample取得不夠random,或是量太少03/06 08:37
推 yougigun: 推s03/06 09:35
推 keepxha: ML/DL常見問題,若資料不夠多可試試K-fold驗證03/06 13:34
推 Luluemiko: 應該是資料分布的問題 train跟test很不像03/06 23:17
→ Luluemiko: 可以回頭看一下兩組資料特徵的分布是否相似03/06 23:19
感謝各位指點,思考了一下有點頭緒:
我描述一下我的dataset ,
binary output只有0和1,
1很少,比例懸殊(約1:19)
model訓練時容易往0靠近,
如果val dataset被分配到較少的1,
val_loss比train loss好應該是可以理解的
延伸請教一下,
若要train這種比例懸殊的binary dataset,
train data的0,1比例要維持原本的懸殊比例嗎?
或是0,1比例1:1效果會比較好?
我的想法是1:1 model比較不會往某邊靠,
但和實際data比例不符感覺又會失真
※ 編輯: keven92110 (114.136.206.180), 03/07/2019 00:19:25
※ 編輯: keven92110 (114.136.206.180), 03/07/2019 00:24:05
※ 編輯: keven92110 (114.136.206.180), 03/07/2019 00:35:04
※ 編輯: keven92110 (114.136.206.180), 03/07/2019 01:14:15
推 sma1033: 通常資料分類比例太過懸殊有兩種作法:1.弄成你說的1:1 03/07 07:30
→ sma1033: 2.把量少的那方loss權重乘以一個大於1的倍數,讓model在 03/07 07:31
→ sma1033: training過程無法忽略量少的資料,你可以考慮看那個適合 03/07 07:31
推 f496328mm: 比較常看到的是,用真實比例 03/07 13:04
→ f496328mm: 最後在判斷 0 or 1 的機率上,不要用 0.5 03/07 13:04
→ f496328mm: 試試看用 0.1 or 0.2 去調整你的邊界 03/07 13:05
→ f496328mm: imbalance 的問題很常見 03/07 13:06
→ f496328mm: 我之前做生產線分析,不良品只有0.5% 03/07 13:06
→ f496328mm: 就是用調整邊界的方法 03/07 13:07
推 ruokcnn: Imbalanced data 可以用smote解解看 03/07 21:29
→ ruokcnn: 或是先cluster 各抓同數目的兩類別train看看 03/07 21:30
→ ruokcnn: Binary問題最好還是輸出0~1之後再切thresholds 03/07 21:31
推 luli0034: 應該說今天小類別對你來說是不是很重要 如果是的話才是 03/09 00:11
→ luli0034: 問題(如何提升recall) 類別不平衡可以over/under sampli 03/09 00:11
→ luli0034: ng或是在training 前調整class weight等等 也可以試試 03/09 00:11
→ luli0034: 看切資料集的時候維持原類別比例(val也是維持1:19) 03/09 00:11