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

简介:

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

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
相关文章
|
5天前
|
存储 人工智能 并行计算
Pai-Megatron-Patch:围绕Megatron-Core打造大模型训练加速生态
Pai-Megatron-Patch(https://github.com/alibaba/Pai-Megatron-Patch)是阿里云人工智能平台PAI研发的围绕Nvidia MegatronLM的大模型开发配套工具,旨在帮助开发者快速上手大模型,完成大模型(LLM)相关的高效分布式训练,有监督指令微调,下游任务评估等大模型开发链路。最近一年来,我们持续打磨Pai-Megatron-Patch的性能和扩展功能,围绕Megatron-Core(以下简称MCore)进一步打造大模型训练加速技术生态,推出更多的的训练加速、显存优化特性。
|
12天前
|
机器学习/深度学习 人工智能 测试技术
自动化测试的未来:AI与机器学习的融合之路
【9月更文挑战第15天】在软件测试领域,自动化一直被视为提高效率和精确度的关键。随着人工智能(AI)和机器学习(ML)技术的不断进步,它们已经开始改变自动化测试的面貌。本文将探讨AI和ML如何赋能自动化测试,提升测试用例的智能生成、优化测试流程,并预测未来趋势。我们将通过实际代码示例来揭示这些技术如何被集成到现有的测试框架中,以及开发人员如何利用它们来提高软件质量。
48 15
|
18天前
|
机器学习/深度学习 Python
训练集、测试集与验证集:机器学习模型评估的基石
在机器学习中,数据集通常被划分为训练集、验证集和测试集,以评估模型性能并调整参数。训练集用于拟合模型,验证集用于调整超参数和防止过拟合,测试集则用于评估最终模型性能。本文详细介绍了这三个集合的作用,并通过代码示例展示了如何进行数据集的划分。合理的划分有助于提升模型的泛化能力。
|
30天前
|
机器学习/深度学习 资源调度 分布式计算
阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源
PAI-ChatLearn现已全面开源,助力用户快速、高效的Alignment训练体验。借助ChatLearn,用户可全身心投入于模型设计与效果优化,无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任,为用户提供一站式解决方案。
|
30天前
|
机器学习/深度学习 人工智能 运维
自动化测试的未来:AI与机器学习的融合
【8月更文挑战第29天】随着技术的快速发展,自动化测试正在经历一场革命。本文将探讨AI和机器学习如何改变软件测试领域,提供代码示例,并讨论未来趋势。
|
30天前
|
Web App开发 敏捷开发 测试技术
自动化测试之美:使用Selenium WebDriver进行网页功能验证
【8月更文挑战第29天】在数字时代,软件质量是企业竞争力的关键。本文将深入探讨如何通过Selenium WebDriver实现自动化测试,确保网页应用的可靠性和性能。我们将从基础设置到编写测试用例,逐步引导读者掌握这一强大的测试工具,同时分享实战经验,让测试不再是开发的负担,而是质量保证的利器。
|
30天前
|
SQL 安全 测试技术
软件测试的哲学:探索、验证与持续改进
【8月更文挑战第29天】本文将深入探讨软件测试的核心理念,从测试的本质和目的出发,阐述测试不仅是技术活动,更是一种思考方式。我们将一起探索如何通过测试来验证软件的正确性,确保其满足用户需求,并在此基础上不断改进。文章将分享实用的测试策略和方法,包括代码示例,旨在帮助读者更好地理解和实践软件测试的艺术。
|
4月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
209 14
|
4月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
95 1
|
4月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)