Re: [問題] 關於K-fold交叉驗證的一段程式碼

作者: ddavid (謊言接線生)   2021-03-09 00:40:48
※ 引述《Tombo (Tombo)》之銘言:
: 自己的理解是
: 交叉驗證只建立一次模型
: 之後執行k次拆解訓練集去訓練跟驗證
: 但圖中迴圈中會呼叫四次build_model方法
: 不過為什麼不會變成重新建立四次新模型,而覆蓋之前的權重?
: 自己以為會是建立一次編譯模型後
: 再連續四次用切割過的不同子資料集
: 呼叫fit做訓練就好
: 謝謝
你的理解不完全正確。
K-fold事實上主要驗證的並不是「訓練出的模型」,而是「用來訓練模型的演算
法」以及「演算法使用的參數」。
它主要的目標是,利用到所有資料都做過training也做過testing,去確認說至
少在我手上擁有的所有資料,不管怎麼切分做訓練跟測試,我現在用的這個演算法跟
搭配的參數都可以有好的表現。
如果前述成立了,那麼當我真的所有資料都拿來training,這時我沒有testing
可以先測了,但是因為我們測過K-fold,所以我們相對就比較有信心說完整資料用這
個演算法搭這個參數表現也會好。
但也不是沒有辦法直接利用K-fold訓練出來的K個Model而不要重來。最常見的簡
單做法有兩個,一個是如果理論上Model裡面的權重之類進行平均是有意義的,那可
以直接平均得出一個單一平均Model。另一個做法是保留這K個Model,每次要處理新
資料,則K個Model都跑過一次,最後取平均或投票決定最終答案。這樣的做法可以說
是類似bagging的概念。
要注意的是K-fold推廣到使用完整資料這件事情並非100%會成立,例如某個演算
法的參數設定對資料點的密度很敏感,則K-fold時的密度是完整資料的(K-1)/K而已
,就會導致K-fold時的最佳參數其實可能無法直接用在拿完整資料來訓練的情況。
作者: Tombo (Tombo)   2021-03-09 13:32:00
謝謝說明,我可能要再回去好好想想,感謝
作者: IsOneWaY (W)   2021-03-09 20:25:00

Links booklink

Contact Us: admin [ a t ] ucptt.com