您现在的位置是:首页 >技术交流 >【机器学习】P20 模型的诊断 - 验证集网站首页技术交流

【机器学习】P20 模型的诊断 - 验证集

脚踏实地的大梦想家 2023-06-02 08:00:03
简介【机器学习】P20 模型的诊断 - 验证集

从本节博文开始,将会有几篇博文的内容探究的是如何对模型进行评估,模型是好是坏?模型能否拟合?

  • P20 (本篇)模型的诊断,验证集
  • P21 正则化
  • P22 过拟合和欠拟合的探究2,偏差与方差

本篇博文省流版:
验证集用来判断是否过拟合欠拟合,通常数据集分配为:60% 训练集 + 20% 验证集 + 20% 测试集,model.fit 训练中,验证集就像一个眼睛,会一直观察着模型的训练会不会导致过拟合与欠拟合的发生。


为什么需要评估模型

在机器学习中,我们使用模型来对数据进行预测和分类。模型的好坏通常是指模型的预测精度和泛化能力。

模型的预测精度是指模型在给定输入数据时产生正确输出的能力。通常使用不同的指标来衡量模型的预测精度,如准确率、召回率、F1分数等。

模型的泛化能力是指模型在未曾见过的数据上的表现能力。模型应该能够正确地预测未知数据的输出结果。如果模型只是在训练数据集上表现良好,但在未曾见过的数据上表现差,那么我们就称这个模型出现了过拟合。过拟合的模型会过度关注训练数据的细节,导致无法对新数据进行准确的预测。相反,如果模型在训练数据集和测试数据集上的表现都很差,那么我们就称这个模型出现了欠拟合。欠拟合的模型在训练数据集和测试数据集上都不能正确地进行预测。

不管是在回归模型上,还是分类模型任务中,都会存在着过拟合和欠拟合的现象:

在这里插入图片描述
在这里插入图片描述
因此,好的模型应该在训练数据集和测试数据集上都能表现良好,同时具有较高的预测精度和较好的泛化能力。而验证集,则是机器学习中常用的一种评估模型性能的方法。


什么是验证集

验证集,validation set,又称为交叉验证集,cross validation set,用于评估机器学习模型的性能的数据集。

在训练模型时,通常会将数据集划分为三个部分:训练集、验证集和测试集。训练集用于训练模型,测试集用于评估最终模型的性能,而验证集则用于调整模型的超参数和选择最佳的模型,如下图:

在这里插入图片描述
到这里往往会产生第一个疑惑:“有测试集,为什么还需要验证集?”

验证集与测试集

省流: 验证集和测试集都是用于评估模型,但是验证集是在模型训练中,测试集则是在模型训练后;

最简单的模型训练流程:

① 选择模型
② 训练调整参数
③ 梯度下降降低损失值
④ 重复 ②~③
⑤ 输出模型,测试集判断准确率

非省流:
验证集的作用在于帮助调整模型的超参数以及选择最佳模型。在训练过程中,验证集数据不参与模型参数的更新,而是用于评估当前模型的泛化能力。通过观察验证集上的性能指标,可以判断模型是否出现了过拟合或欠拟合等问题,并对模型进行相应的调整,以提高模型的性能。

测试集的作用是在模型训练和调整完成后,对最终模型的性能进行评估,用于模拟模型在实际应用中的性能。测试集应该是独立于训练集和验证集的数据集,而且在训练过程中不能使用测试集数据进行任何调整,否则测试集就失去了独立性,无法真实地评估模型的性能。

虽然可以通过测试集的数据来判断模型是否过拟合,但测试集的数据只能在训练结束后使用。而且测试集的数据不能用于调整模型,否则可能会导致测试集的偏差,影响最终评估结果的准确性。因此,在训练过程中,验证集的作用非常重要,它可以帮助调整模型的超参数以及选择最佳模型,从而避免过拟合等问题。

这时,第二个问题来了,验证集是如何参与到神经网络中的呢?这就延伸出两个问题:

  • 神经网络中的验证集有什么作用?
  • 如何使用验证集调整神经网络参数?

验证集与神经网络

神经网络中的验证集有什么作用

虽然验证集不能自动调整模型或直接影响模型的训练过程,但它在模型选择、调参和评估等方面仍然具有重要作用。

  • 模型的选择
    首先,验证集在模型选择方面的作用是帮助选择最佳的模型。在训练多个模型后,使用验证集来评估每个模型的性能,并选择性能最好的模型作为最终的模型。
  • 模型的参数调整
    其次,验证集在超参数调整方面的作用是帮助选择最佳的超参数组合。在训练同一模型的多个版本时,使用验证集来评估每个版本的性能,并选择超参数组合表现最佳的版本。
  • 模型的评估
    最后,验证集在模型评估方面的作用是提供对模型性能的独立评估。在使用测试集评估模型性能前,通常需要使用验证集来对模型进行调整和优化,以确保测试集的评估结果是准确的。

因此,虽然验证集不能直接影响模型的训练过程,但它在模型选择、调参和评估等方面仍然具有重要作用。

上文中提到模型的选择,那么什么是模型的选择,如何进行模型的选择?

神经网络模型的选择

选择模型1,还是模型2,还是模型3?
在这里插入图片描述
在神经网络中,模型的选择通常是指选择不同的神经网络结构,例如不同的层数、节点数、激活函数等,以满足不同的任务需求和数据特征。因此,在神经网络中,模型的选择是非常重要的。

虽然深度学习领域已经出现了很多经典的神经网络结构,例如 LeNet、AlexNet、VGG、ResNet、Inception 等,但在具体应用中,仍然需要根据具体任务和数据特征选择适合的神经网络结构。不同的神经网络结构可能具有不同的优缺点,例如一些结构可能具有更好的分类性能,而另一些结构可能更适合处理序列数据或图像数据等。

在进行模型选择时,一般需要考虑以下因素:

  • 任务需求: 根据任务的类型和需求,选择适合的神经网络结构。例如,对于图像分类任务,通常使用卷积神经网络(CNN)结构,而对于序列数据处理任务,通常使用循环神经网络(RNN)结构。

  • 数据特征: 根据数据的特征和规模,选择适合的神经网络结构。例如,对于图像数据,如果数据规模较小,可以选择浅层的 CNN 结构;如果数据规模较大,可以选择深层的 ResNet 结构。

  • 计算资源: 根据计算资源的限制和可用性,选择适合的神经网络结构。例如,对于计算资源较为有限的情况,可以选择轻量级的神经网络结构,如 MobileNet、ShuffleNet 等。

总之,在神经网络中,模型的选择仍然是非常重要的,并且需要根据具体的任务需求、数据特征和计算资源等因素来进行选择。


如何使用验证集调整神经网络参数

如何根据验证集调整超参数?可以通过观察验证集的损失函数曲线:

图中 J c v J_{cv} Jcv 为验证集损失函数曲线 J t r a i n J_{train} Jtrain 为训练集损失函数曲线

在这里插入图片描述
验证集的损失函数,会有一个从大到小,然后又变大的波动曲线,第一个从大到小是因为伴随着梯度下降,参数的调整,整个模型的拟合效果不断提升;而第二个从小到大是因为伴随着不断地调整,会出现过拟合的现象,导致验证集地损失值增大。


其实本章的内容,只需要知道有一个集合称为验证集,作用是在模型的拟合过程中,参与到参数的调整过程中,目的就是为了观察是否出现过拟合与欠拟合现象。本文缺少过拟合和欠拟合具体地示例与出现后如何解决,这个将在博文:

  • P22 过拟合和欠拟合的探究2,偏差与方差

中进行阐述。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。