交叉验证和参数优化


14

使用10倍交叉验证时,我对参数优化存在疑问。

我想问一下,在每次折叠的模型训练过程中参数是否应该固定,即(1)为每个折叠的平均精度选择一组优化的参数。

要么

(2)我应该为每个折页找到优化参数,然后每个折页使用不同的优化参数来训练其模型,然后分别对折页的测试数据进行测试,最后平均每个折页的准确性作为结果?

交叉验证的正确方法是哪一种?非常感谢。


这个问题:stats.stackexchange.com/questions/1826/…有两个很好的答案(最高分),我认为它们可以为您的问题提供帮助。第二个正是您想要的。OBS:我想写这个作为评论,但是我做不到,所以我已经回答了。
2012年

Answers:


11

首先让我们区分两组参数:模型参数(例如,回归中特征的权重)和学习算法的参数(和超参数)。交叉验证的目的是确定学习参数,这些参数在我们从每个折叠中学习的总体样本中都能很好地概括。

更具体地说:我们在学习参数的全局范围内进行搜索,但是在每一折叠中,我们固定学习参数并学习模型参数。结果应该是学习参数,这些参数平均可以在所有方面产生最佳性能。然后,我们可以使用它们在整个数据集上训练模型。


抱歉,我所质疑的参数是您所说的超参数。
凯文

如libSVM中的参数c和g。因此,我应该使用与上面提到的(2)方法相同的c和g来训练每一折的模型,然后选择最佳方法?非常感谢你。
凯文

2
上面的(1)和(2)对我来说不清楚,因此我没有明确提及它们。您应该搜索c&g的空间,以便在折叠倍数取平均值时最大化您的任务指标。因此,您将c&g设置为某个值,对所有折叠进行训练和测试程序,对它们进行平均,保持该分数,修改c或g,然后重复。最终,您找到了最佳的c&g,然后您可以在所有数据上训练最终模型。
2012年

非常感谢你。我尝试总结答案。数据被拆分为10倍:fold-1:(train1,test1)... fold-10:(train10,test10)然后使用(c1,g1)训练并测试fold-1到fold-10,平均所有折叠的准确性。尝试另一个(c2,g2)执行相同的过程...重复直到找到最佳(c,g)。最佳(c,g)的平均准确度将是我10倍交叉验证的结果。
凯文(Kevin)

1
听起来没错……
Joel

16

我认为目前接受的答案是不幸的,是不完整的。我不同意这句话

交叉验证的目的是确定学习参数,这些参数在我们从每个折叠中学习的总体样本中都能很好地概括。

这确实是交叉验证的一个非常重要的应用,但不是唯一的。通常,您想做两件事:

  1. 建立最佳模型
  2. 准确了解其性能

现在,要根据您的算法来完成目标1,您可能需要调整一些超参数,而这实际上通常是通过交叉验证来完成的。但这还不能帮助您实现目标2。为此,您需要基本上嵌套交叉验证,如下所示:

  • 将整个数据分成n个折叠
  • 对于每个折叠,将训练数据再次分成子折叠
  • 在子折叠上使用交叉验证以学习良好的超参数
  • 利用这些超参数,可以在该折叠的训练数据上建立模型
  • 在测试数据上测试模型
  • 在下一个折叠重复

要建立一个好的模型,您只需要内部交叉验证。您仍然需要这样做以获得良好的模型。但是要获得对模型性能的良好估计,您需要在交叉验证方案中执行模型构建的整个过程。这还包括插补等步骤。


1
Erik,能否请您提供有关如何执行此过程的参考?
2015年

嗨@Erik,分析的一般顺序是(1)使用交叉验证找到最佳的调整参数,(2)在整个训练数据集上重新训练模型(使用获得的调整参数)以获取模型参数,以及(3 )通过使用嵌套交叉验证查看此方法的总体性能估计?我感到困惑的是,在嵌套CV的过程中可能会选择不同的超参数,因此嵌套的CV不会专门研究上面获得的超参数/模型参数的整体性能吗?
米歇尔

1
我的谈话有点晚了,但我想指出这种方法也称为“嵌套”或“双重交叉验证”,这是Tom Fearn的一个很好的解释以及scikit中代码的示例-学习文档
MD004
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.