※ 引述《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时的最佳参数其实可能无法直接用在拿完整资料来训练的情况。