【问题标题】:how to learn from each fold in the k-fold cross validation? [closed]如何从 k 折交叉验证中的每个折中学习? [关闭]
【发布时间】:2020-06-05 04:58:05
【问题描述】:
在执行 k 折交叉验证时,对于每一折,我们都有不同的验证集和稍微改变的学习集。假设你从第一折到第二折。你是如何从第二次迭代中继承的第一次折叠中学到的?目前,您似乎只计算准确性,而学习的模型被丢弃并且永远不会保留。
我错过了什么?如果保留这样的模型?它是如何保留的,DQN 与 KNN 的方法有什么不同?
【问题讨论】:
-
我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 machine-learning @ 中的介绍和注意事项987654322@.
标签:
machine-learning
cross-validation
k-fold
【解决方案1】:
K 折交叉验证 不会在每次迭代中重新训练模型。相反,它训练和评估 K 个不同的独立(可以并行化)模型具有不同的数据集折叠,但 具有相同超参数。这不是为了得到更准确的模型,而是通过计算聚合验证分数来获得更准确(从统计上讲)的验证(即:您可以估计模型准确度的均值和标准差)。
然后,您可以只保留其中一个模型并对其指标使用聚合估计(而不是使用在该模型的特定折叠中计算的那个),或者使用完整的数据集训练(从头开始)一个新模型。在最后一种情况下,您对模型指标的最佳估计仍然是以前的聚合指标,但可以使用新的未使用测试集来估计新指标。那么,你为什么要这样做?嗯,那是因为你通常使用交叉验证和超参数调优。因此,每次调整超参数时,只需使用交叉验证检查聚合的度量估计。但是,当您完成模型调优后,您将使用看不见的测试集计算最终指标。
【解决方案2】:
让我们考虑一种情况,您想为某些数据找到回归模型。对于模型将使用多少项,您有多种选择。更多的术语可能意味着更好的准确性,但也意味着过度拟合的风险。要选择正确的模型,请使用一些 train data 对其进行训练,并针对通常相互排斥的一些 test data 对其进行测试。
现在,为了更精确地估计模型的准确度,您可以使用 k 折交叉验证,它允许您使用多达 k test datasets。请注意,您使用 k-fold 来评估 在给定一些数据的情况下您的模型有多好,而不是用来训练它。事实上,当训练成本很高(例如深度神经网络)或您的数据集足够大以确保模型准确度足够接近时,几乎不会使用 k-fold。
所以回答你的最后一个问题:不,模型不一定保留。准备好进行实际练习后,您可以使用所有数据对其进行重新训练。