机器学习之过拟合与欠拟合

article/2025/4/22 12:32:28

1   机器学习中的误差

一般地,将学习器(机器学习模型)的实际预测输出与样本的真实输出之间的差异称为“误差”(error)。

统计学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。不同的学习方法会给出不同的模型。当损失函数给定时,基于损失函数的模型的训练误差(training error)和模型的测试误差(test error) 就自然成为学习方法评估的标准。注意,统计学习方法具体采用的损失函数未必是评估时使用的损失函数。当然,让两者一致是比较理想的。

                   

   

2    过拟合与欠拟合

2.1   期望误差

在机器学习三要素中,详见机器学习三要素。我们理论上希望期望误差越小越好,但是期望误差又不能直接求得,所以使用经验误差来估计期望误差。因此,希望机器学习模型预测的输出值与真实值间的误差越小。

但是,实际中并不是经验误差(期望误差)越小越好。若经验误差(期望误差)过小,则可能使得模型在训练集中表现的非常好,而在测试集中表现的非常差。也就是说过于强调拟合原始数据,而丢失了算法的本质,若给出一个新的值使之预测,它将表现的很差,将此现象称之为过拟合

2.2     过拟合与欠拟合

下图是一个回归问题的例子,以此为例进行引入过拟合与欠拟合现象。

第一个模型是一个线性模型,处于欠拟合状态,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原始数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,虽然能非常好地适应我们的训练集但在新输入变量进行预测时可能会效果不好;而中间的模型似乎最合适。

分类问题中也存在这样的问题:

第一个模型处于欠拟合状态,不能很好的分类数据;第三个模型处于过拟合状态,对于新的数据集会表现的很差;中间第二个模型最合适。就以多项式理解,x 的次数越高,拟合的越好,但相应的预测的能力就可能变差(第三个模型)。

2.2.1   过拟合

过拟合:训练误差和泛化误差间的差距太大,即过度的关注于训练集数据本身,而忽略了它的规律,导致训练集上的误差<<验证集的误差。也就是说模型的学习能力太过强大,以至于把训练样本所包含的不太一般的特性都学到了。

泛化误差可以衡量一个机器学习模型是否可以很好地泛化到未知数据。机器学习的目的是减少泛化误差。

泛化误差一般表现为一个模型在训练集和测试集上的错误率。

模型的过拟合是无法彻底无法避免的,我们所能做的只能是“缓解”或减少其风险。

2.2.1.1     过拟合根本原因

过拟合的根本原因:是特征维度过多,导致拟合的函数完美的经过训练集,但是对新数据的预测结果则较差。即指学习时选择的模型所包含的参数过多,模型复杂度高,以致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。

模型过拟合时所选模型的复杂度则往往会比真模型更高,在下图中,右边的图处于过拟合状态。函数超参数有5个,特征参数的维度为4维;而左边的图处于恰好合适的状态,函数超参数有3个,特征参数的维度为2维,因此,模型复杂度越高(多项式次数越多),越容易过拟合。 

2.2.1.2    假设函数过拟合检验

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

1、对于线性回归模型,我们利用测试集数据计算代价函数

2、对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

误分类的比率,对于每一个测试集实例,计算:

然后对计算结果求平均。

2.2.1.3  过拟合的判断

使用一个测试集来测试每一次迭代的参数在测试集上是否最优,将训练集和测试结的代价函数错误率与迭代次数绘制在同一张图上。比较随着迭代次数的增加,训练误差与测试误差间的关系。

对于训练集,当迭代次数较小时,模型拟合程度更低,训练误差较大;随着迭代次数的增长,拟合程度提高,训练误差减小。

 对于测试集或交叉验证集,当迭代次数较小时,模型拟合程度低,测试集或交叉验证集误差较大;但是随着迭代次数的增长,测试集或交叉验证集误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候,此时,应该提前停止训练或测试。

2.2.1.4     过拟合解决方法

问题是,如果我们发现了过拟合问题,应该如何处理?

1、减少特征维度,丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)

2、正则化。保留所有的特征,但是减少参数θ的大小(magnitude)来影响模型。

3、数据集扩增。需要得到更多的符合要求的数据,即和已有的数据是独立同分布的。

2.2.2   欠拟合

指机器学习模型不能在训练集上获得足够小的误差,即训练误差太大,模型在训练集中没有训练好。

2.2.2.1   欠拟合根本原因

欠拟合的根本原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大,训练不充分。

模型欠拟合时所选模型的复杂度则往往会比真模型更低,在下图中,右边的图处于欠拟合状态。函数超参数有2个,特征参数的维度为1维;而左边的图处于恰好合适的状态,函数超参数有3个,特征参数的维度为2维,因此,模型复杂度越低,越容易欠拟合。

2.2.2.2     欠拟合的判断

使用一个测试集来测试每一次迭代的参数在测试集上是否最优,将训练集和测试结的代价函数错误率与迭代次数绘制在同一张图上。比较随着迭代次数的增加,训练误差与测试误差间的关系。

对于训练集,当迭代次数较小时,模型拟合程度更低,训练误差较大,处于欠拟合状态,随着迭代次数的增加,训练误差减少缓慢或处于平缓状态。

对于测试集,当迭代次数较小时,模型拟合程度低,测试误差较大,处于欠拟合状态,随着迭代次数的增加,训练误差减少缓慢或处于平缓状态。

即主要检查测试集或验证集的误差大小,若测试集或验证集的误差很大,则说明模型处于欠拟合状态。

2.2.2.3    欠拟合的解决方法

通过增加特征维度,即增加训练数据集来解决。

3    偏差与方差

3.1    偏差与方差分解

机器学习中偏差与方差并不是单独存在,而是相互依存。偏差-方差分解解释了偏差、方差和噪音间的关系。偏差-方差分解试图对机器学习算法的期望泛化错误率进行拆解,算法在不同训练集上学得的结果很可能不同,即便这些训练集是来自同一分布。

即泛化误差可以分解为偏差、方差和噪音之和。

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变化所导致的学习性能的变化,即刻画了数据扰动所造成的的影响;噪音表达了在当前任务上任何学习算法所能表达到的期望泛化误差下界,即刻画了学习问题本身的难度。

给定学习任务,为了取得好的泛化性能,则需要使得偏差较小,即能够给充分拟合数据,并且是方差较小,即使得数据扰动产生影响小。

下图是偏差-方差关系图。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使得学习器产生显著的变化,此时偏差主导了泛化误差错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐被学习器学到,方差逐渐主导了泛化错误率;在训练数程度充足后,学习器拟合能力已经非常强,训练数据发生轻微的扰动则会导致学习器发生显著的变化,若训练数据自身的、非全局的特性被学习器学到了,则会发生过拟合。

3.2    过拟合、偏差与方差间的关系

在机器学习中,当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?

以多项式函数为例,多项式的次数越多,模型越复杂。我们通常会通过将训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:

               

对于训练集,当多项式次数d较小,模型较简单时,模型拟合程度更低,误差较大;随着多项式次数d的增长,模型复杂度增加,拟合程度提高,误差减小。

对于交叉验证集,当多项式次数d较小,模型较简单时,模型拟合程度低,误差较大;但是随着多项式次数d的增长,模型复杂度增加,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

如果我们的交叉验证集误差较大,我们如何判断是方差还是偏差呢?根据上面的图表,我们知道:

当训练集误差和交叉验证集误差相近时,训练集误差和测试集误差的偏差很小,模型处于欠拟合状态;即训练集误差和交叉验证集误差近似时:偏差/欠拟合。

当训练集误差和交叉验证集误差相差较大时,训练集误差和交叉验证集误差的方差很大,模型处于过拟合状态;即交叉验证集误差远大于训练集误差时:方差/过拟合。

3.3    偏差与方差的判断

学习曲线就是一种很好的工具,我经常使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。

即,如果我们有100行数据,我们从1行数据开始,逐渐学习更多行的数据。思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。

如何利用学习曲线识别高偏差/欠拟合:作为例子,我们尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观:

也就是说在高偏差/欠拟合的情况下,增加数据到训练集不一定能有帮助。

如何利用学习曲线识别高方差/过拟合:假设我们使用一个非常高次的多项式模型,并且正则化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。

 也就是说在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。

4    参考资料

[1].《机器学习》         ---周志华

[2].《统计学习方法》  ---李航

[3]. https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes    

                                                                             


http://chatgpt.dhexx.cn/article/HkOwsxJ3.shtml

相关文章

机器学习过拟合与欠拟合!

↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习&#xff0c;不错过 Datawhale干货 作者&#xff1a;胡联粤、张桐&#xff0c;Datawhale面经小组 Q1 如何理解高方差与低偏差? 模型的预测误差可以分解为三个部分: 偏差(bias)&#xff0c; 方差(variance)…

机器学习:过拟合与欠拟合问题

本文首发于 AI柠檬博客&#xff0c;原文链接&#xff1a;机器学习&#xff1a;过拟合与欠拟合问题 | AI柠檬 过拟合&#xff08;overfitting&#xff09;与欠拟合&#xff08;underfitting&#xff09;是统计学中的一组现象。过拟合是在统计模型中&#xff0c;由于使用的参数过…

机器学习知识总结 —— 6. 什么是过拟合和欠拟合

文章目录 过拟合欠拟合泛化能力避免过拟合的一般方法从数据集上规避从训练模型上规避从训练过程上规避 作为从「统计学&#xff08;Statistics&#xff09;」跟「计算机科学&#xff08;Computer Science&#xff09;」交叉而诞生的新学科「机器学习&#xff08;Machine Learni…

VGG16网络结构要点

学习BCNN的过程时遇到&#xff0c;VGG16的网络结构如下图示意&#xff1a; 13个卷积层&#xff08;Convolutional Layer&#xff09;&#xff0c;分别用conv3-XXX表示3个全连接层&#xff08;Fully connected Layer&#xff09;,分别用FC-XXXX表示5个池化层&#xff08;Pool …

VGG-16网络结构解析

VGG&#xff0c;也叫做VGG-16网络。这个网络结构很有意思&#xff0c;相必实现这个网络的作者是有点强迫症&#xff0c;不然整个网络为什么能够如此的协调一致。基本上每一次的内容都大同小异&#xff0c;2层或3层卷积层&#xff0c;激活一下&#xff0c;池化一下&#xff0c;就…

VGGNet网络结构

深度神经网络一般由卷积部分和全连接部分构成。卷积部分一般包含卷积&#xff08;可以有多个不同尺寸的核级联组成&#xff09;、池化、Dropout等&#xff0c;其中Dropout层必须放在池化之后。全连接部分一般最多包含2到3个全连接&#xff0c;最后通过Softmax得到分类结果&…

VggNet网络结构详解

VggNet网络结构详解 #图像识别网络结构详解 一、概述 VGG在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出&#xff0c;斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。 二、网络详解 VGG16相比Al…

VGG11、VGG13、VGG16、VGG19网络结构图

VGG11、VGG13、VGG16、VGG19网络结构图 前言 前言 VGG网络采用重复堆叠的小卷积核替代大卷积核&#xff0c;在保证具有相同感受野的条件下&#xff0c;提升了网络的深度&#xff0c;从而提升网络特征提取的能力。 可以把VGG网络看成是数个vgg_block的堆叠&#xff0c;每个vgg_…

VGG网络结构详解与模型的搭建

首先贴出三个链接&#xff1a; 1. VGG网络结构详解视频 2. 使用pytorch搭建VGG并训练 3. 使用tensorflow搭建VGG并训练 VGG网络是在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出&#xff0c;斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和…

【深度学习】VGG16网络结构复现 | pytorch |

文章目录 前言一、VGG16介绍二、VGG16网络复现——pytorch 前言 这篇文章按道理来说应该是很简单的&#xff0c;但是因为一个很小的bug&#xff0c;让我难受了一晚上&#xff0c;直到现在我也没找出原因。后面我会提到这个bug。 今天这篇文章主要用来手动搭建vgg16这个网路&am…

经典卷积神经网络---VGG16网络

VGG16网络结构及代码 下图为VGG网络结构图&#xff0c;最常用的就是表中的D结构&#xff0c;16层结构&#xff08;13层卷积3层全连接层&#xff09;&#xff0c;卷积的stride为1&#xff0c;padding为1&#xff0c;maxpool的大小为2&#xff0c;stride为2&#xff08;池化只改…

VGG16网络结构复现(Pytorch版)

VGG有6种子模型&#xff0c;分别是A、A-LRN、B、C、D、E&#xff0c;我们常看到的基本是D、E这两种模型&#xff0c;即VGG16&#xff0c;VGG19 为了方便阅读&#xff0c;并没有加上激活函数层 from torch import nn import torch from torchsummary import summaryclass VGG…

手动搭建的VGG16网络结构训练数据和使用ResNet50微调(迁移学习)训练数据对比(图像预测+前端页面显示)

文章目录 1.VGG16训练结果&#xff1a;2.微调ResNet50之后的训练结果&#xff1a;3.结果分析&#xff1a;4.实验效果&#xff1a;&#xff08;1&#xff09;VGG16模型预测的结果&#xff1a;&#xff08;2&#xff09;在ResNet50微调之后预测的效果&#xff1a; 5.相关代码和知…

卷积神经网络——vgg16网络及其python实现

1、介绍 VGG-16网络包括13个卷积层和3个全连接层&#xff0c;网络结构较LeNet-5等网络变得十分复杂&#xff0c;但同时也有不错的效果。VGG16有强大的拟合能力在当时取得了非常的效果&#xff0c;但同时VGG也有部分不足&#xff1a;1、巨大参数量导致训练时间过长&#xf…

VGG16系列III: 网络模型结构

目录 Part I: CNN的基础构件 一张图片如何作为输入&#xff1f; 什么是卷积 什么是Padding 什么是池化(pooling) 什么是Flatten 什么是全连接层 什么是Dropout 什么是激活函数 VGG16的整体架构图 Part II: VGG 网络架构 典型VGG网络结构 VGG 网络参数数量计算: P…

VGG网络结构(一)

刚开始接触深度学习、卷积神经网络的时候非常懵逼&#xff0c;不知道从何入手&#xff0c;我觉得应该有一个进阶的过程&#xff0c;也就是说&#xff0c;理应有一些基本概念作为奠基石&#xff0c;让你有底气去完全理解一个庞大的卷积神经网络&#xff1a; 本文思路&#xff1a…

VGG 网络结构

从图中可以看出VGG结构由5层卷积层、3层全连接层、softmax输出层构成&#xff0c;层与层之间使用max-pooling&#xff08;最大池化&#xff09;分开&#xff0c;所有隐层的激活单元都采用ReLU函数。VGG最大的贡献就是证明了卷积神经网络的深度增加和小卷积核的使用对网络的最终…

PyTorch之VGG16网络结构详解以及源码解读

论文&#xff1a;Very Deep Convolutional Networks for Large-Scale Image Recognition 简单介绍 意义&#xff1a; 证明了增加小卷积核的个数以及网络深度可以提高分类结果的正确率。 预处理&#xff1a; 各通道减去RGB在训练集上的均值。 特点&#xff1a; 1&#xff09;使用…

VGG-16网络结构

一、VGG-16网络框架介绍 VGGNet是牛津大学计算机视觉组&#xff08;Visual Geometry Group&#xff09;和Google DeepMind公司的研究员一起研发的深度卷积神经网络。 VGGNet探索了卷积神经网络的深度与其性能之间的关系&#xff0c;通过反复堆叠33的小型卷积核和22的最大池化层…

[VGG16]——网络结构介绍及搭建(PyTorch)

一、VGG16的结构层次 VGG16总共有16层&#xff0c;13个卷积层和3个全连接层&#xff0c;第一次经过64个卷积核的两次卷积后&#xff0c;采用一次pooling&#xff0c;第二次经过两次128个卷积核卷积后&#xff0c;采用pooling&#xff1b;再经过3次256个卷积核卷积后。采用pooli…