Answers:
的选择有些随意。这是我决定k的方法:
首先,为了降低CV结果的差异,您可以并且应该使用新的随机分割重复/迭代CV。
这使得高 =>更多计算时间的论点在很大程度上是不相关的,因为无论如何您都想计算许多模型。我倾向于主要考虑计算的模型总数(类似于自举)。因此,我可以决定100 x 10倍CV或200 x 5倍CV。
@ogrisel已经解释了,通常大的意味着更少的(悲观的)偏见。(对于k = n,有些例外是已知的,即留一)。
如果可能,我使用一个作为样本大小的除数,或者样本中应该分层的组的大小。
太大意味着仅可能有少量样本组合,从而限制了不同的迭代次数。
这些想法对于较小的样本量具有更大的影响力。有更多可用样本,并不重要。组合的可能数量很快变得足够大,因此10倍CV的100次迭代(例如)不会产生很大的重复风险。同样,更多的训练样本通常意味着您处于学习曲线的平坦部分,因此在所有样本上训练的替代模型和“真实”模型之间的差异变得可以忽略不计。ñ
K越大,意味着对高估真实预期误差的偏见就越小(因为训练倍数将更接近总数据集),但方差越大,运行时间越长(随着您接近极限情况:留一法CV)。
如果在training_size =总数据集的90%时学习曲线的斜率足够平坦,则可以忽略偏差,并且K = 10是合理的。
同样,较高的K会给您更多的样本以估计您所估计的更准确的置信区间(使用假设CV测试错误分布正态性的参数标准误差,或仅做iid假设的非参数自举CI,实际上并不是很正确)因为CV折叠不是彼此独立的)。
编辑:低估=>高估真正的预期错误
编辑:关于大K或LOOCV的较高方差的此答复部分可能是错误的(并不总是如此)。有关此答案中模拟的更多详细信息:留一法与K折交叉验证中的偏差和方差(感谢Xavier Bourret Sicotte的这项工作)。
我不知道如何K
影响准确性和泛化性,这可能取决于学习算法,但是对于算法复杂度在训练实例中呈线性关系的训练算法,它无疑几乎会线性(渐近地,线性地)影响计算复杂度。K-1
如果训练时间在训练实例数量上是线性的,则训练的计算时间会增加时间。因此,对于小型训练集,我会考虑准确性和概括性方面,尤其是考虑到我们需要从有限数量的训练实例中获得最大收益。
但是,对于训练实例数量(至少线性)中渐近计算复杂度增长较大的大型训练集和学习算法,我只是选择了K=2
这样的方法:对于渐近复杂度线性增长的训练算法,计算时间不会增加训练实例。
K = N/N*0.30
评论:我们也可以选择20%而不是30%,具体取决于您要选择作为测试集的大小。
如果数据集大小:N = 1500;K = 1500/1500 * 0.30 = 3.33;我们可以选择K值为3或4
留一法交叉验证中的大K值将导致过度拟合。留一法交叉验证的小K值会导致拟合不足。
该方法可能是幼稚的,但仍然比为不同大小的数据集选择k = 10更好。