[問題] ML 不同CV方法導致結果差距

看板Python作者 (名器)時間7年前 (2018/03/16 00:23), 7年前編輯推噓4(402)
留言6則, 3人參與, 7年前最新討論串1/1
大家好,想請問一個CV(cross validation)的問題 我用sklearn model_selection 兩個不同CV的方法 1. train_test_split 2. StratifiedKFold 結果同一個model train出來 1. train acc ~90%, test acc ~75%(overfitting) 2. train acc ~90%, test acc ~30%(average acc) 為什麼在testing上差距會這麼大啊? 代表我用方法1 train出來是超級無敵overfitting嗎? 或是我的DataSet是根本無法分析的? 還是我腦殘code寫錯了? keras log上 方法1 val_acc會跟著train acc上升,但是方法2每個round都是死魚在30% python code: 1. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=87) 2. skf = StratifiedKFold(n_splits=4) for train_index, test_index in skf.split(X, y): X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] 麻煩各位指點一下!感謝 //--- 3/16補: 在StratifiedKFold前補上shuffle之後,就可以train到跟方法1一樣了 謝謝各位的指點!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.243.157.116 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1521131008.A.ED7.html

03/16 01:59, 7年前 , 1F
如果你的validation accuracy 沒上升那很明顯是寫錯了
03/16 01:59, 1F

03/16 02:10, 7年前 , 2F
你先搞清楚這兩種方法的差異
03/16 02:10, 2F

03/16 02:22, 7年前 , 3F
仔細想想好像也不一定 你的資料量有多大? class之間
03/16 02:22, 3F

03/16 02:22, 7年前 , 4F
有沒有明顯的不平衡問題?
03/16 02:22, 4F
X.shape = 57xx, 120, 12 y.shape = 57xx, 3 我有三個class, frequency 大約都33%

03/16 07:24, 7年前 , 5F
一個有shuffle一個沒有
03/16 07:24, 5F
我試著用觀測用train_test_split看X_train/X_test 是會shuffle的,假設一開始X_train = [a0, a1, a2, ..., an-1, an] X_train = [a11, a31, ..., a1, an-9] 但是我用StratifiedKFold X_train/X_test還是會依照順序 (shuffle設=True/False都沒差..還是我data太小了?) X_train = [a0, a8, a15 ..., an-6, an] 智商愚鈍還是不懂為何結果會差這麼多... ※ 編輯: kiloxx (59.124.166.19), 03/16/2018 13:21:23 ※ 編輯: kiloxx (59.124.166.19), 03/16/2018 14:53:03

03/16 15:14, 7年前 , 6F
你的data可能有照label順序排 所以沒shuffle就會有問題
03/16 15:14, 6F
可是我有比較過兩個方法 y_train 跟 y_test class的frequency是跟原始y是一樣的 (每個class都是~33%) 等等晚點來試試看丟進去kfold前先shuffle一次看看 ※ 編輯: kiloxx (59.124.166.19), 03/16/2018 18:01:59 ※ 編輯: kiloxx (111.243.156.10), 03/16/2018 19:36:51
文章代碼(AID): #1Qgfu0xN (Python)
文章代碼(AID): #1Qgfu0xN (Python)