交叉验证和网格搜索有什么区别?

时间:2013-10-12 14:17:09

标签: cross-validation definition difference grid-search

简单来说,交叉验证和网格搜索有什么区别?网格搜索如何工作?我应该首先进行交叉验证然后进行网格搜索吗?

5 个答案:

答案 0 :(得分:77)

交叉验证是指您保留部分数据用于评估模型。有不同的交叉验证方法。最简单的概念是,只需占用数据的70%(只需在此处编号,不一定是70%)并将其用于培训,然后使用剩余的30%的数据来评估模型的数据性能。您需要不同的数据来训练和评估模型的原因是为了防止过度拟合。当然,还有其他(稍微涉及更多)交叉验证技术,如k-fold交叉验证,这在实践中经常使用。

网格搜索是一种执行超参数优化的方法,也就是说,它是一种找到超参数的最佳组合的方法(超参数的一个例子是优化器的学习率),给定模型(例如CNN)和测试数据集。在这种情况下,您有几个模型,每个模型都有不同的超参数组合。对应于单个模型的这些参数组合中的每一个可以说是位于“网格”的点上。然后,目标是训练每个模型并评估它们,例如使用交叉验证。然后选择表现最佳的那个。

举一个具体的例子,如果您使用的是支持向量机,则可以为gammaC使用不同的值。因此,例如,您可以为(gamma, C) (1, 1), (0.1, 1), (1, 10), (0.1, 10)创建一个具有以下值的网格。[1, 0.1]。它是一个网格,因为它类似于gamma的{​​{1}}和[1, 10]的{​​{1}}的产品。网格搜索基本上会为这四对C值中的每一个训练一个SVM,然后使用交叉验证对其进行评估,并选择最佳的一个。

答案 1 :(得分:14)

交叉验证是一种用于稳健估计模型的测试集性能(泛化)的方法。 网格搜索是一种选择模型族中最佳模型的方法,通过参数网格进行参数化。

在这里,通过“模型”,我不是指训练有素的实例,更多的是算法和参数,例如SVC(C=1, kernel='poly')

答案 2 :(得分:9)

交叉验证,简单地分离测试和培训数据,并使用测试数据验证培训结果。我知道有两种交叉验证技术。

首先,测试/训练交叉验证。拆分数据作为测试和训练。

其次,k-fold交叉验证将您的数据拆分为k个bin,将每个bin用作测试数据,并将其余数据用作训练数据并验证测试数据。重复该过程k次。并获得平均表现。 k-fold交叉验证对小型数据集特别有用,因为它可以最大化测试和训练数据。

网格搜索;系统地通过参数曲调的多种组合,交叉验证每一个,并确定哪一个给出最佳性能。你可以通过许多组合只稍微改变参数。

答案 3 :(得分:1)

交叉验证是一种保留不训练模型的数据集的特定子集的方法。稍后,您可以在最终确定之前在此子集上测试模型。

您需要执行的交叉验证的主要步骤是:

  1. 将整个数据集拆分为训练和测试数据集(例如,整个数据集的80%为训练数据集,其余20%为测试数据集)

  2. 使用训练数据集训练模型

  3. 在测试数据集上测试模型。如果您的模型在测试数据集中表现良好,请继续训练过程

例如还有其他交叉验证方法

  • 一劳永逸的交叉验证(LOOCV)

  • K折交叉验证

  • 分层K折交叉验证

  • 专业交叉验证策略(当训练和休息数据集彼此差异很大时使用)。

答案 4 :(得分:-1)

简单来说, 考虑将面食制作为模型:

  • 交叉验证-选择面食数量
  • 网格搜索-选择正确比例的配料。