看板 DataScience 關於我們 聯絡資訊
最近有一個機器學習任務,是一個簡單的二元分類模型, 但是有一個問題想請教大家, 我想用交叉驗證 K-fold 的方法來驗證並且選擇模型, 但我的訓練、驗證、流程被質疑學理不通, 別人的論文不會這樣做,我不知道產品能不能這樣做。 我覺得我的作法沒有問題,但又有點害怕真的我腦袋有問題, 我想跟版上的有經驗的前輩請益,再回頭跟長官討論。 我將我的作法寫在下面, =========================訓練、驗證、測試流程============================ 首先將資料集 Data 切成 train 跟 test train 切成 k 塊,以 4 為例, A, B, C, D k=1, B + C + D 定義 train-train , A 定義 train-validation 我有七種模型,你可以想像用不同的 backbone (resnet, mobilenet,...) 訓練完成我在 A 上可以得到 7 個 AUC 。 k=2, A + C + D 定義 train-train , B 定義 train-validation 我有七種模型,同上 訓練完成我在 B 上可以得到 7 個 AUC 。 k=3, A + B + D 定義 train-train , C 定義 train-validation 我有七種模型,同上 訓練完成我在 C 上可以得到 7 個 AUC 。 k=4, A + B + C 定義 train-train , D 定義 train-validation 我有七種模型,同上 訓練完成我在 D 上可以得到 7 個 AUC 。 以上都跟 test 無關,只在 train 中。 最後我會得到 k*(3+3+1) 個模型,我全部在 test 上做驗證, 可以得到所有模型在測試集上的評估數據。 產品端可以將全部的模型都上線,但是伺服器費用高,所以不能全上。 需要挑選上線的模型,挑選 N 個模型,由單一表現最高的開始往下挑, 舉個例子來說明我的挑選方法: fold-k model_n 代表第 k 個 fold 裡面第 n 個模型 k = 1,2,3,4 有 4 個 fold n = 1,2,3,4,5,6,7 我有七個模型架構 top-1 ensemble 挑 test 上表現最好的第一個模型, 假設來自 fold-3 model_1 ,其中 test AUC 0.86 。 top-2 ensemble 挑 test 上表現最好的前兩個模型,預測結果兩者取平均, 假設來自 fold-3 model_1 、 fold-1 model_3 ,其中 test AUC 0.87 top-3 ensemble 挑 test 上表現最好的前三個模型,預測結果三者取平均, 假設來自 fold-3 model_1 、 fold-1 model_3 、 fold-3 model_2 , 其中 test AUC 0.88 。 top-4 ensemble 挑 test 上表現最好的前四個模型,預測結果四者取平均, 假設來自 fold-3 model_1 、 fold-1 model_3 、 fold-3 model_2 、 fold-4 model_1, 其中 test AUC 0.875 。 發現在選到第四個模型綜合結果下降了,所以就挑選前三個模型, 當作產品的 classifier ,當然預測結果是取平均。 ============================================================== 挑選模型是從所有的 fold 當中訓練的所有模型來挑選。 請問這樣做產品會有很嚴重的邏輯錯誤在裡面嗎? 有的話在哪邊? 還是我應該簡單點,切 train, validation, test 這樣訓練一次, 不要做 K-fold ,但先前的經驗告訴我 ensemble 這種作法會提昇一個檔次, 所以我會想往這樣走, 而且透過不同的模型架構以及 K-fold 作法可以獲得更多的模型。 我不知道我的邏輯錯在哪? 懇請高手指導,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.254.12.48 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1643344620.A.B8A.html ※ 編輯: wheado (111.254.12.48 臺灣), 01/28/2022 12:37:38 ※ 編輯: wheado (111.254.12.48 臺灣), 01/28/2022 12:39:30 ※ 編輯: wheado (111.254.12.48 臺灣), 01/28/2022 12:42:36 ※ 編輯: wheado (111.254.12.48 臺灣), 01/28/2022 12:45:39 ※ 編輯: wheado (111.254.12.48 臺灣), 01/28/2022 12:50:24
linfeelin: top-2 ensemble 01/28 14:12
linfeelin: 挑 test 上表現最好的前 01/28 14:12
linfeelin: 兩個模型,預測結果兩者取平均,假設來自 fold-3 model 01/28 14:12
linfeelin: _1 、 fold-1 model_3 ,其中 test AUC 0.87 (很好奇 01/28 14:12
linfeelin: 是可以這樣算?k-fold 算完應該只會有一個結果吧 01/28 14:12
lycantrope: 一個模型做完全部k-kold應該只有一個結果吧? 01/28 14:23
YogaGAGA: k-fold cv可以防止model剛好遇到一組很符合的data set, 01/28 15:03
YogaGAGA: 所以取平均的performance 01/28 15:03
YogaGAGA: 看起來你的做法跟這個邏輯剛好反過來,反而去取一組剛好 01/28 15:03
YogaGAGA: 表現好的model,可能是這個原因? 01/28 15:03
wheado: 我的模型架構有七個,所以會有七個結果 01/28 15:24
jigfopsda: 不同 fold 資料不一樣,出來的數字不能直接比較 01/28 15:35
andrew43: 如果共有100筆資料拿去切4份,那每一個auc也是基於100 01/28 17:30
andrew43: 筆資料算的。 01/28 17:30
andrew43: 而不是25筆資料算得一個auc 01/28 17:30
yoyololicon: test data被你拿來當val 上線後那才是真的test data 01/28 17:30
yoyololicon: 有個正解的回文在下面 01/28 17:32
andrew43: 所以你漏了把4個25再集合才算AUC 01/28 17:32
wheado: 感謝各位的指教 01/28 18:11