验证集是在机器学习开发过程中使用的一组样本,用于比较模型、调整设置,以及监测模型在未直接参与参数拟合的数据上的表现。它的目的是为有关泛化(机器学习)的决策提供依据,即判断模型在训练所用样本之外的数据上表现如何。与训练数据不同,验证集通常不提供用于拟合模型参数的观测数据;与测试集不同,开发者会在模型开发过程中有意参考验证集的评估结果。(developers.google.com)
在模型开发中的作用
将数据划分为三部分时,训练子集用于参数估计,验证子集用于模型选择,测试子集用于最终评估。在监督学习中,验证样本通常同时包含输入和目标标签,以便将预测结果与已知结果进行比较。虽然验证数据不直接用于拟合各个候选模型,但它们会通过开发决策影响最终系统。因此,验证数据并不是评估最终模型时完全未经使用的独立证据来源。(developers.google.com)
超参数控制模型或其训练过程的某个方面,而不是通过常规拟合得到的参数。验证集上的表现可以指导模型复杂度、正则化强度或学习率等设置的选择,也可以帮助在不同模型类别之间作出选择。如果使用最终测试集来作出这些决策,就会削弱其独立性,并可能导致过于乐观的评估。(developers.google.com)
这种区别取决于实际用途,而不只是名称。即使项目将某个数据集称为“测试集”,只要它被反复用于比较不同方案,就实际上承担了验证数据的作用。反过来,如果某个评估子集一直保留到开发决策确定之后才使用,它就承担测试的作用。文档必须说明各个子集的实际用途,而不能只给出名称。(developers.google.com)
验证损失与训练监测
验证集上的表现可以用损失函数或任务专用指标来衡量。验证损失衡量模型在留出样本上的预测误差,而其他指标可能以更贴近实际应用的方式反映性能。监测的量不一定与训练目标相同,因此模型之间的比较取决于所选的评估标准。(keras.io)
对于人工神经网络,通常在每个训练轮次结束后进行验证。在早停法中,当所监测的验证指标不再满足指定的改善条件时,训练便会结束。检查点机制可以保存训练过程中某个选定阶段的模型。这些机制利用验证结果来选择训练时长或模型状态,即使验证样本并未用于更新参数。(keras.io)
训练损失和验证损失并不总能直接比较。例如,随机失活和某些基于噪声的正则化层在训练与评估阶段的运行方式不同。Keras 在评估验证数据时,不会启用这些层在训练阶段的作用。因此,验证损失低于训练损失本身并不能证明数据划分有误。解释这些结果时,也必须考虑评估模式和损失的计算方式。(keras.io)
构建数据划分
验证集的划分必须反映所评估的预测场景。随机划分适用于某些数据集,但无法顾及观测数据之间所有形式的依赖关系。分层划分使各子集中的类别比例大致相近,有助于避免某些折中缺少稀有类别。这种方法处理的是类别构成问题,而非所有偏差或依赖关系的来源。(scikit-learn.org)
具有分组结构的观测数据需要采用不同的方法。如果多条记录属于同一个人、组织或其他共同单位,将相关记录同时放入训练子集和验证子集,可能评估的是模型对已知组内数据的预测能力,而不是对新组的泛化能力。如果预期任务要求对新组进行预测,就应采用按组划分的方法,将指定的组彼此分开。(blog.scikit-learn.org)
对于时间序列,按时间先后划分比随机分配更能体现预测未来的实际情境。用较晚的观测数据训练、用较早的观测数据验证,可能使整个流程接触到在预测时点尚不可用的信息。考虑时间顺序的评估则使用较早的观测数据训练,并在随后的时间段上评估。因此,划分策略也有助于界定评估分数衡量的是哪一种未来数据或未见数据上的表现。(scikit-learn.org)
验证集的比例没有统一标准。数据分配需要在可用于拟合的数据量与留出评估是否充分之间作出权衡。划分还需要确保相关情形得到足够的代表。如果分布偏移使未来样本与开发数据存在实质性差异,那么即使验证集经过谨慎隔离,也无法保证模型部署后的表现。(developers.google.com)
数据泄漏与反复使用
当模型开发纳入了按照评估规程本不应可用的信息时,就会发生数据泄漏(机器学习)。泄漏可能发生在模型拟合之前:如果使用留出的观测数据进行拟合,特征缩放、缺失数据插补、主成分分析和特征选择都可能泄漏信息。正确的做法是从相应的训练子集中学习这些变换,再将其应用于验证样本,而不重新拟合。(scikit-learn.org)
反复进行模型选择还会带来另一种局限。在同一个验证集上比较大量候选模型,可能会偏向那些利用了这一有限样本中偶然特征的模型。这是模型选择层面的过拟合,不一定是对训练样本的过拟合。因此,观测到的最佳验证分数可能夸大模型在新数据上的表现。单独保留最终测试集,有助于区分模型选择中的成功与独立评估的结果。(jmlr.org)
与交叉验证的关系
交叉验证用多组训练集与验证集的划分替代单一固定的验证子集。在 k 折交叉验证中,每一折都轮流作为留出的评估数据,其余折则用于拟合。汇总后的分数可用于比较模型,同时允许同一观测数据在不同次运行中分别承担训练和评估两种角色,但在同一次运行中绝不同时承担这两种角色。(scikit-learn.org)
当调参与性能估计都采用重采样时,嵌套交叉验证通过内层循环和外层循环将两者分开。内层循环选择设置;外层循环则使用未参与这些决策的观测数据,评估整个选择流程。如果报告的仍是模型选择过程中被优化的那个交叉验证分数,就缺少这种隔离,结果也可能过于乐观。(scikit-learn.org)