【机器学习】训练集,测试集,为啥还要验证集?

简介:

机器学习为什么要有验证集

1 为什么要有测试集

要知道一个模型在新样本中的效果,唯一的办法就是使用新的数据进行试验。

一种方法是将模型直接部署到生产环境,测试它的性能。但是如果模型的性能很差,这么做就会引起用户抱怨 ,所以这不是最好的方法。

更好的选项是将你的数据分成两个集合:

  • 训练集 (training set)
  • 测试集 (test set)

正如它们的名字,用训练集进行训练,用测试集进行测试。对新样本的错误率称作泛化错误(generalization error)样本外错误(out-of-sample error),通过测试集对模型评估,你可以估计模型的错误率。这个值可以告诉你,你的模型对新样本的性能,即泛化能力

提示:一般将总数据的80%用作训练,20%用作测试。

那么,为什么还需要验证集呢?
在讨论这个问题之前,我们先来看一下什么是过拟合、正则化以及超参数。

2 过拟合、正则化和超参数

如果训练错误率低(即,你的模型在训练集上错误不多),但泛化到新数据时错误率高,意味着模型对训练数据过拟合overfitting

过拟合发生的主要原因为:训练数据量不足但模型太复杂参数过多,拟合能力太强。因此解决过拟合的方法可以是:使用更简单的模型或减少模型参数(或限制模型参数变化范围)从而简化模型。

机器学习中用于限制模型参数范围从而避免过拟合的方法称为正则化regularization。而正则化的程度则用一个超参数hyperparameter控制。

3 为什么要用验证集?

评估一个模型很简单:只要使用测试集。现在假设你在两个模型之间犹豫不决(比如一个线性模型和一个多项式模型):如何做决定呢?一种方法是两个都训练,然后比较在测试集上的效果。

现在假设线性模型的效果更好,但是你想做一些正则化以避免过拟合。问题是:如何选择正则化超参数的值?一种选项是用 100 个不同的超参数训练100个不同的模型。

假设你发现最佳的超参数的泛化到新数据的错误率最低,比如只有 5%。然后就选用这个模型作为生产环境,但是实际中性能不佳,误差率达到了 15%。为什么呢?
答案在于,你调整超参数是针对测试集的,你在测试集上多次测量了泛化误差率,然后根据误差调整模型和超参数,这使得你认为的最佳超参数可能只是适合这个测试集。这意味着模型在实际使用时对于新的数据的性能不会高。

这个问题通常的解决方案是,再保留一个集合,称作验证集合 validation set。用训练集和多个超参数对模型进行训练,选择在验证集上有最佳性能的模型和超参数。当你对模型满意时,用测试集再做最后一次测试,以得到泛化误差率的预估。

为了避免“浪费”过多训练数据在验证集上,通常的办法是使用交叉验证cross-validation:训练集分成互补的子集,每个模型用随机的几个不同子集合并训练,再用剩下的子集验证。不断调整超参数和模型类型训练并用验证集测试,直到确定模型类型和超参数。最终的模型再使用最佳超参数和全部的训练集进行训练,用测试集得到泛化误差率。

最后,谈一谈一个定理——No Free Lunch Theorem

4 没有免费的午餐定理(No Free Lunch Theorem)

如果完全不对数据做假设,就没有理由选择一个模型而不选另一个。这称作没有免费午餐(NFL)定理
也就是说,没有对数据进行假设,你就不能说哪个模型是最适合这些数据的。

模型是训练数据的简化版本。简化意味着舍弃没有泛化泛化能力的多余的细节。而要确定舍弃什么数据、保留什么数据,必须要做假设。例如,线性模型的假设是数据基本上是线性的,实例样本和线性模型直线间的距离只是噪声,可以放心忽略。

在一篇 1996 年的著名论文( “The Lack of A Priori Distinctions Between Learning Algorithms,” D. Wolperts (1996))中,David Wolpert 证明,如果完全不对数据做假设,就没有理由选择一个模型而不选另一个。这称作没有免费午餐(NFL)定理

对于一些数据集,最佳模型是线性模型,而对一些数据集最佳模型则是神经网络。没有一个模型在使用之前就可以保证效果更好(如这个公理的名字所示)。确定哪一个模型是否最佳的唯一方法就是测试所有的模型。但是这是不可能的,所以实际中就必须要做一些对数据合理的假设,只评估几个合理的模型。

例如,对于简单任务(假设它简单),你可能是用不同程度的正则化评估线性模型,对于复杂问题(假设它复杂),你可能要评估几个神经网络模型。

参考:
Hands-On Machine Learning with Scikit-Learn and TensorFlow
作者:Aurélien Géron
相关文章
|
7月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
6月前
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
|
9月前
|
算法 数据挖掘 测试技术
犬类癌症检测(CANDiD)研究:使用独立测试集对1000多只犬进行基于高通量测序的多癌种早期检测"液体活检"血液测试的临床验证
这项研究首次在大规模独立测试集上验证了基于NGS的液体活检在犬类多癌种检测中的应用。该方法具有很高的特异性,可以作为一种新的无创癌症筛查和辅助诊断工具。通过早期发现癌症,有望改善犬类癌症的诊断和管理模式。
145 12
|
10月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
313 6
|
10月前
|
机器学习/深度学习 Python
机器学习中模型选择和优化的关键技术——交叉验证与网格搜索
本文深入探讨了机器学习中模型选择和优化的关键技术——交叉验证与网格搜索。介绍了K折交叉验证、留一交叉验证等方法,以及网格搜索的原理和步骤,展示了如何结合两者在Python中实现模型参数的优化,并强调了使用时需注意的计算成本、过拟合风险等问题。
445 6
|
10月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
231 1
|
11月前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
2699 1
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
11月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
763 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
11月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
2192 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
11月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
373 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)

热门文章

最新文章