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

作者: Tombo (Tombo)   2021-03-08 19:30:33
不好意思,打擾了
想請教下面圖片中關於
實作四折的k fold交叉驗證的程式碼
(出自市面上的教學書)
http://imgur.com/LM1nonA
自己的理解是
交叉驗證只建立一次模型
之後執行k次拆解訓練集去訓練跟驗證
但圖中迴圈中會呼叫四次build_model方法
不過為什麼不會變成重新建立四次新模型,而覆蓋之前的權重?
自己以為會是建立一次編譯模型後
再連續四次用切割過的不同子資料集
呼叫fit做訓練就好
謝謝
作者: aassdd926 (打東東)   2021-03-08 23:32:00
每次的訓練集不同,模型就不同,等於 5 folds 給你 5個模型而為何不同,就是因為模型會根據 training data fit出它的 weights / parameters
作者: Tombo (Tombo)   2021-03-08 23:53:00
我最後的問法有問題沒講清楚,我是想連續用k個不同的分割資料集來一口氣訓練完成,但是他的做法不是會一次又一次覆蓋權重,而不能巡迴一遍資料集
作者: empireisme (empireisme)   2021-03-09 00:05:00
想問哪本教科書,感恩
作者: aassdd926 (打東東)   2021-03-09 10:48:00
我不太確定我理解的對否,但這樣的概念不就是1個訓練集,然後你用不同的batch size
作者: Tombo (Tombo)   2021-03-09 13:07:00
tensorflow與keras- python深度學習應用實務,這本書 /他會分割成子資料集,跟不同驗證資料集,所以好像也不太算bach size不同而已??就像最新回文的那位版友說的可以加強論證的感覺,抱歉最近才剛學習很多不了解
作者: min86615 (minshang)   2021-03-09 18:17:00
不同的initialization weight有一定程度的會影響模型表現,所以通常會重新創建.(模型可能會學到上個模型留下來的pattern)
作者: Tombo (Tombo)   2021-03-09 19:37:00
看完大家的回覆跟再看一次書後,應該是自己誤解交叉驗證的背後精神,感覺是透過子資料集創建不同模型(所以需要重建),再透過這k個模型用平均數據或是其他方法找出結論,不是用同一個模型重複訓練不同子資料集
作者: min86615 (minshang)   2021-03-10 08:11:00
原po如果你用其他可解釋性高的機器學習算法就不用重建,像是線性回歸之類的,因為答案是唯一,不會因初始化影響,反正你只要得知error,所以這本書為何要重建其實是因為他用了NN,NN只能找到局部最優解,不像線性回歸,所以導致每次NN的重量權值是不同的,甚至有可能被init weight影響。我認為原po的盲點應該在這 ,Kfold 就只是交叉驗證的手法,你問我模型該不該保留等MSEMAE都符合需求要去做預測時再保留就行
作者: ddavid (謊言接線生)   2021-03-10 18:08:00
其實K-fold就是驗證而已,並沒有打算要用這K個模型找結論用多個模型綜合得到結論的方式有很多種,例如我回應文提到的bagging、另外boosting、random forest也都是他們在「做法上」有些地方看起來跟K-fold有相似性,但意義上並不是相同的只是「剛好」你可以把K-fold的K個模型留下來做bagging省去重train的時間而已,但就只是剛好可利用而已

Links booklink

Contact Us: admin [ a t ] ucptt.com