K折交叉验证中K的选择


136

我现在已经多次使用ķ折交叉验证来评估某些学习算法的性能,但是对于如何选择的值,我一直感到困惑ķ

我经常看到并使用的值ķ=10,但是这对我来说似乎完全是任意的,我现在只是按习惯使用10而不是仔细考虑。对我来说,随着值的增加,您似乎会获得更好的粒度ķ,因此理想情况下,您应该将ķ得很大,但是也有可能会产生偏差。

我想知道的值ķ应该取决于什么,以及在评估算法时应该如何思考。如果我使用交叉验证的分层版本,是否会有所改变?


Answers:


69

的选择有些随意。这是我决定k的方法ķ=10ķ

  • 首先,为了降低CV结果的差异,您可以并且应该使用新的随机分割重复/迭代CV。
    这使得高 =>更多计算时间的论点在很大程度上是不相关的,因为无论如何您都想计算许多模型。我倾向于主要考虑计算的模型总数(类似于自举)。因此,我可以决定100 x 10倍CV或200 x 5倍CV。ķ

  • @ogrisel已经解释了,通常大的意味着更少的(悲观的)偏见。(对于k = n,有些例外是已知的,即留一)。ķķ=ñ

  • 如果可能,我使用一个作为样本大小的除数,或者样本中应该分层的组的大小。ķ

  • 太大意味着仅可能有少量样本组合,从而限制了不同的迭代次数。ķ

    • 对于留一式:不同的模型/测试样本组合。迭代根本没有意义。ñ1个=ñ=ķ
    • 例如和:存在不同的模型/测试样本组合。您可以考虑在此处进行所有可能的组合,因为倍CV的19个迭代或总共190个模型不是很多。ñ=20 n = 20k=10ķ(n=202)=190=19kk
  • 这些想法对于较小的样本量具有更大的影响力。有更多可用样本,并不重要。组合的可能数量很快变得足够大,因此10倍CV的100次迭代(例如)不会产生很大的重复风险。同样,更多的训练样本通常意味着您处于学习曲线的平坦部分,因此在所有样本上训练的替代模型和“真实”模型之间的差异变得可以忽略不计。ñkñ


6
(+1)用于详细说明,但(-1)用于CV的重复计数。的确,创建精确重复项(查看观测值的id)的风险很小(给定足够的数据等),但是创建模式/数据结构重复项的风险非常高。不管k是多少,我都不会重复CV超过10次...只是为了避免低估方差。
斯特芬,2012年

3
@steffen,这是ogrisel指出的吗?(代理)模型不是真正独立的吗?我完全同意这种情况。实际上,我尝试通过用(替代)模型wrt的稳定性解释结果来考虑这一点。交换“一些”样本(我不想在这里详细说明-但请参见例如stats.stackexchange.com/a/26548/4598)。而且我计算标准误差,而是报告例如在迭代过程中观察到的误差的中位数和95 t h百分位数。我将对此发布一个单独的问题。5ŤH95ŤH
cbeleites 2012年

2
我懂了。我同意该方法可有效估计代理人的稳定性。我想到的是后续统计检验,以确定一种模型是否优于另一种模型。重复执行简历的方法常常会意外地增加alpha错误的机会。所以我混淆了内部与外部验证(如dikran已经把它在这里)。
斯特芬,2012年

2
@cbeleites:我同意你的看法。由于样本量有限而引起的差异通常会超过模型不确定性。
jpcgandre 2014年

2
@jpcgandre:至少对于敏感度,特异性等分类错误,可以计算出受检病例总数导致的不确定性。虽然这确实是总方差的一部分,但至少在我的工作中遇到的情况确实如此,但这种不确定性通常如此之大,以至于即使是粗略的估计也足以表明结论受到严格限制。而且这个限制仍然存在,使用50倍8倍或80倍5倍而不是40倍10倍交叉验证并不会消失。
cbeleites 2014年

37

K越大,意味着对高估真实预期误差的偏见就越小(因为训练倍数将更接近总数据集),但方差越大,运行时间越长(随着您接近极限情况:留一法CV)。

如果在training_size =总数据集的90%时学习曲线的斜率足够平坦,则可以忽略偏差,并且K = 10是合理的。

同样,较高的K会给您更多的样本以估计您所估计的更准确的置信区间(使用假设CV测试错误分布正态性的参数标准误差,或仅做iid假设的非参数自举CI,实际上并不是很正确)因为CV折叠不是彼此独立的)。

编辑:低估=>高估真正的预期错误

编辑:关于大K或LOOCV的较高方差的此答复部分可能是错误的(并不总是如此)。有关此答案中模拟的更多详细信息:留一法与K折交叉验证中的偏差和方差(感谢Xavier Bourret Sicotte的这项工作)。


1
ķñķñķ

6
差异是指通过将CV折叠误差的中位数或平均值作为“真实分布”获得的估计预期测试误差的方差,而不是跨CV折叠。当k大时,您更接近于LOO-CV,这在很大程度上取决于您手头的特定训练集:如果样本数量少,则不能代表真实分布,因此不能代表方差。当k大时,k倍CV可以模拟训练集的任意硬样本。
ogrisel'5

8
另外:Kohavi在其博士学位论文的第3章中研究了验证中的偏倚-方差-折衷。我强烈推荐它。
斯特芬,2012年

3
ķķķķ

是的,我认为这是正确的直觉。
ogrisel

0

我不知道如何K影响准确性和泛化性,这可能取决于学习算法,但是对于算法复杂度在训练实例中呈线性关系的训练算法,它无疑几乎会线性(渐近地,线性地)影响计算复杂度。K-1如果训练时间在训练实例数量上是线性的,则训练的计算时间会增加时间。因此,对于小型训练集,我会考虑准确性和概括性方面,尤其是考虑到我们需要从有限数量的训练实例中获得最大收益。

但是,对于训练实例数量(至少线性)中渐近计算复杂度增长较大的大型训练集和学习算法,我只是选择了K=2这样的方法:对于渐近复杂度线性增长的训练算法,计算时间不会增加训练实例。


-6

解:

K = N/N*0.30
  • N =数据集的大小
  • K =折

评论:我们也可以选择20%而不是30%,具体取决于您要选择作为测试集的大小。

例:

如果数据集大小:N = 1500;K = 1500/1500 * 0.30 = 3.33;我们可以选择K值为3或4

注意:

留一法交叉验证中的大K值将导致过度拟合。留一法交叉验证的小K值会导致拟合不足。

该方法可能是幼稚的,但仍然比为不同大小的数据集选择k = 10更好。


4
因此,您建议无论样本大小如何,始终使用k = 3或4-IMHO与无论样本大小如何均等地使用k = 10都没有实质性区别。ññ0.3=1个0.33.33=CØñsŤ
cbeleites

K = N / N * 0.3 = 10/3是常数。因此,对于每个条件都使用该值是不合逻辑的。
卡马尔塔帕
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.