Re: [問題] 交叉驗證的流程請益
應該說你目前的架構不該稱作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
討論串 (同標題文章)
DataScience 近期熱門文章
PTT數位生活區 即時熱門文章