看板 Python 關於我們 聯絡資訊
※ 引述《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時的最佳參數其實可能無法直接用在拿完整資料來訓練的情況。 -- 「可是妳......不是天使嗎?」 「天使?」她緩緩的轉過頭來,用悲傷的表情。「天使,只不過是神創造出來的 不死玩偶。」 「而神,也只不過是詛咒下的偽善使者。」 --星.幻.夢的傳說 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.171.101 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1615221650.A.035.html ※ 編輯: ddavid (111.250.171.101 臺灣), 03/09/2021 00:44:35
Tombo: 謝謝說明,我可能要再回去好好想想,感謝 03/09 13:32
IsOneWaY: 推 03/09 20:25