Re: [問題] 交叉驗證的流程請益

看板DataScience作者 (淡紅色楓葉)時間2年前 (2022/01/28 15:58), 2年前編輯推噓1(102)
留言3則, 3人參與, 2年前最新討論串2/2 (看更多)
應該說你目前的架構不該稱作K-fold validation,比較像是某種bootstrap+ensemble 假設有n種模型架構,K-fold validation是用來比較模型架構以及找出最好的模型架構 : =========================訓練、驗證、測試流程============================ : 首先將資料集 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 。 到這邊目前都沒問題,但是接下來就不正確了 正常的K-fold validation會將每個模型在不同k上面的AUC做平均 所以你會得到7個平均過後的AUC,分別代表7個不同模型架構 根據這7個AUC選最出好的模型架構,再去測在test set上驗證表現以及有沒有overfit 正常的K-fold validation到這邊就結束了,因為你已經找到一個相對穩定的模型架構 接下來可以考慮拿選出來的模型架構在7個fold上train好的model進行emsemble然後上線 也可以可以考慮用這個模型train在所有data上,然後上線這單一model 或是用這個模型重複整個K-fold validation,只是這次在所有data上,然後emsemble上線 : 以上都跟 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 ,當然預測結果是取平均。 這個其實比較像是bootstrap+ensemble 你有很多個模型架構,train在很多sample過後的training set (類似bootstrap) 最後再從中選出比較好的幾個ensemble 所以本質上你直接把test當成是validation set來測model以及如何選model進行ensemble 在不容易overfit的task下的確有可能有比較好的表現,但就不該稱作K-fold validation 順帶一提,在你目前的架構下是沒有實質上的test set的 : ============================================================== : 挑選模型是從所有的 fold 當中訓練的所有模型來挑選。 : 請問這樣做產品會有很嚴重的邏輯錯誤在裡面嗎? : 有的話在哪邊? : 還是我應該簡單點,切 train, validation, test 這樣訓練一次, : 不要做 K-fold ,但先前的經驗告訴我 ensemble 這種作法會提昇一個檔次, : 所以我會想往這樣走, : 而且透過不同的模型架構以及 K-fold 作法可以獲得更多的模型。 : 我不知道我的邏輯錯在哪? : 懇請高手指導,謝謝。 簡單說,K-fold是為了找出最好的模型架構,但並不代表這就會給你最好的表現 你可以用K-fold validation找出前幾好的模型架構ensemble 也可以用類似你目前的方式,train一大堆model pool直接ensemble 理論上都是可行的 不過還是建議你重新看一遍K-fold validation的定義,希望有幫助到你 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.231.116 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1643356714.A.D3B.html ※ 編輯: ej0cl6 (118.167.231.116 臺灣), 01/28/2022 15:59:47

01/28 17:33, 2年前 , 1F
推這篇。
01/28 17:33, 1F

01/28 17:45, 2年前 , 2F
有幫助到我,謝謝
01/28 17:45, 2F

01/28 21:25, 2年前 , 3F
謝謝
01/28 21:25, 3F
文章代碼(AID): #1Xyw8gqx (DataScience)
文章代碼(AID): #1Xyw8gqx (DataScience)