简单来说,交叉验证和网格搜索有什么区别?网格搜索如何工作?我应该先进行交叉验证,然后再进行网格搜索吗?
5 回答
交叉验证是指您保留部分数据以用于评估模型。有不同的交叉验证方法。最简单的概念是只取 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,然后使用交叉验证对其进行评估,并选择表现最好的一个。
交叉验证是一种稳健地估计模型的测试集性能(泛化)的方法。网格搜索是一种从一系列模型中选择最佳模型的方法,由参数网格参数化。
在这里,我所说的“模型”并不是指经过训练的实例,更多的是算法和参数,例如SVC(C=1, kernel='poly')
.
交叉验证,简单地将测试和训练数据分开,并用测试数据验证训练结果。我知道有两种交叉验证技术。
首先,测试/训练交叉验证。将数据拆分为测试和训练。
其次,k-fold 交叉验证将您的数据拆分为 k 个 bin,将每个 bin 用作测试数据,并将其余数据用作训练数据并针对测试数据进行验证。重复该过程 k 次。并获得平均性能。k-fold 交叉验证对小数据集特别有用,因为它可以最大化测试和训练数据。
网格搜索;系统地处理参数调整的多种组合,交叉验证每种组合并确定哪一种提供最佳性能。您可以通过多种组合进行工作,只需稍微更改参数即可。
交叉验证是一种保留未在其上训练模型的数据集的特定子集的方法。稍后,您在最终确定之前在此子集上测试您的模型。
进行交叉验证需要执行的主要步骤是:
将整个数据集拆分为训练和测试数据集(例如,整个数据集的 80% 是训练数据集,其余 20% 是测试数据集)
使用训练数据集训练模型
在测试数据集上测试您的模型。如果您的模型在测试数据集上表现良好,请继续训练过程
还有其他交叉验证方法,例如
留一法交叉验证(LOOCV)
K折交叉验证
分层 K 折交叉验证
对抗性交叉验证策略(当训练和休息数据集彼此差异很大时使用)。
简单来说,考虑制作意大利面作为构建模型:
- 交叉验证 - 选择意大利面的数量
- 网格搜索 - 选择正确比例的成分。