53

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

4

5 回答 5

101

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

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

举一个具体的例子,如果你使用支持向量机,你可以为gamma和使用不同的值C。因此,例如,您可以有一个网格,其(gamma, C):具有以下值(1, 1), (0.1, 1), (1, 10), (0.1, 10)。它是一个网格,因为它就像[1, 0.1]forgamma[1, 10]for的乘积C。网格搜索基本上会为这四对(gamma, C)值中的每一个训练一个 SVM,然后使用交叉验证对其进行评估,并选择表现最好的一个。

于 2013-10-12T20:15:21.827 回答
19

交叉验证是一种稳健地估计模型的测试集性能(泛化)的方法。网格搜索是一种从一系列模型中选择最佳模型的方法,由参数网格参数化。

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

于 2013-10-12T22:01:12.077 回答
15

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

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

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

网格搜索;系统地处理参数调整的多种组合,交叉验证每种组合并确定哪一种提供最佳性能。您可以通过多种组合进行工作,只需稍微更改参数即可。

于 2017-05-14T15:49:18.543 回答
1

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

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

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

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

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

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

  • 留一法交叉验证(LOOCV)

  • K折交叉验证

  • 分层 K 折交叉验证

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

于 2018-10-16T09:22:07.313 回答
-8

简单来说,考虑制作意大利面作为构建模型:

  • 交叉验证 - 选择意大利面的数量
  • 网格搜索 - 选择正确比例的成分。
于 2019-04-29T07:29:14.710 回答