作者ddavid (谎言接线生)
看板Python
标题Re: [问题] 关於K-fold交叉验证的一段程式码
时间Tue Mar 9 00:40:48 2021
※ 引述《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://webptt.com/cn.aspx?n=bbs/Python/M.1615221650.A.035.html
※ 编辑: ddavid (111.250.171.101 台湾), 03/09/2021 00:44:35
1F:推 Tombo: 谢谢说明,我可能要再回去好好想想,感谢 03/09 13:32
2F:推 IsOneWaY: 推 03/09 20:25