嵌套交叉验证真的有必要吗?

时间:2015-07-25 23:27:39

标签: machine-learning

我的交叉验证程序有问题。目前我只是循环(迭代)我的参数(例如RB和SVM的C和gamma)并进行内部的一次性交叉验证。

当然这会引入偏见。因此,最好进行嵌套交叉验证,例如外部一次性交叉验证和内部十次交叉验证。

问题在于我只有37个数据点,嵌套的交叉验证会大大增加运行时间,而且我还想打印例如k个最近邻居k对准精度或隐藏层的数量再次精确度(对于神经网络),这在嵌套交叉验证中是不可能的。

如果不使用嵌套交叉验证,是否真的有很大的偏见?或者我可以使用单一的CV方法吗?是否有一些论文声称单个交叉验证是可以的?

2 个答案:

答案 0 :(得分:3)

在嵌套交叉验证中,您可以找到数据的不同子集(外部折叠)的最佳参数。我不能确定如果你不使用嵌套的CV会有多大的伤害,但根据this discussion(链接到this paper),它可能会引人注意。

现在,您说您想要根据准确度绘制隐藏图层的数量。这不是嵌套CV的工作方式:嵌套CV告诉您,除其他外,您可以依赖参数选择来为未看到的数据进行一般性推广。例如,假设您在内部CV中对1, 2, 5, 10个隐藏图层进行网格搜索。如果隐藏图层的外部CV的结果在折叠之间存在很大差异,那么这意味着您无法确定隐藏图层的数量会很好地概括。如果他们最终都选择了相同数量的隐藏层,那就太棒了。

我建议你也阅读this(在python中,但这是我想指出的另一个例子)和this,这是对嵌套CV做什么的一个很好的解释。特别感兴趣的是这一段:

  

外部交叉验证估计此模型拟合方法的性能。为此你使用通常的假设

基本上,嵌套的CV告诉你你的超参数搜索有多好。在此步骤中,您无法绘制精度与某些超参数的关系。您可以查看是否为数据的不同部分(折叠)选择了相同的超参数(或足够接近)。

如果您有大量数据,请考虑减少并行运行的功能或运行内容(您提到神经网络:如果在GPU上运行,它们会慢得多)。

答案 1 :(得分:1)

从统计的角度来看,无论您使用 37个数据点做什么都不会是统计上的声音。即使是最精确的分析也无法推广到此数据集之外的任何内容。您应该尽一切可能获得更多数据,而不是分析和花时间在测试上。

如果你有更大的数据集,那么“单一简历”几乎总是会高估你的结果。这种偏见的大小很难确定,事实上据我所知,它可以证明它实际上是无界的。请参阅Hasti和Tibshirani的统计学习要素中的7.10.2节。