模型的过拟合与欠拟合

2023-11-13

定义

首先要确定的两个概念是Underfit(欠拟合)和Overfit(过拟合),也被称为high bias和high viarance。在表征线性回归模型的下面三张图中,左图使用一条直线来做预测模型,很明显无论如何调整起始点和斜率,该直线都不可能很好的拟合给定的五个训练样本,更不要说给出的新数据;右图使用了高阶的多项式,过于完美的拟合了训练样本,当给出新数据时,很可能会产生较大误差;而中间的模型则刚刚好,既较完美的拟合训练数据,又不过于复杂,基本上描绘清晰了在预测房屋价格时Size和Prize的关系。
在这里插入图片描述
对于逻辑回归,同样存在此问题,如下图:
在这里插入图片描述
机器学习中的泛化:
在机器学习中,我们描述从训练数据学习目标函数的学习过程成为归纳性的学习。
泛化:是指机器学习模型学到的概念在遇到新的数据时表现的好坏(预测准确度等)。
拟合:是指模型逼近目标函数的远近程度。

过拟合(High Viarance)

模型在训练集(training set)上表现的很好,但是在测试集上效果差,也就是说在已知的数据集合中非常好,但是在添加一些新的数据进来训练效果就会差很多,造成这样的原因是考虑影响因素太多,超出自变量的维度过于多了。

欠拟合(High Bias)

模型拟合不够,在训练集(training set)上表现的效果就很差差,没有充分的学习到数据的特征信息,预测的准确度低。

误差(Error)

Error = Viarance + Bias
Bias 反映的是:模型在样本上的输出值与真实值之间的误差,即模型的精确度。
Variance反映的是:模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。

在这里插入图片描述
如上图所示:
偏差值的是模型的输出值与红色中心的距离;方差指的是模型的每一个输出结果与期望之间的距离。就像我们射箭,低偏差指的是我们瞄准的点与红色中心的距离很近,而高偏差指的是我们瞄准的点与红色中心的距离很远。低方差是指当我们瞄准一个点后,射出的箭中靶子的位置与我们瞄准的点的位置距离比较近;高方差是指当我们瞄准一个点后,射出的箭中靶子的位置与我们瞄准的点的位置距离比较远。

  1. 低偏差低方差时,是我们所追求的效果,此时预测值正中靶心(最接近真实值),且比较集中(方差小)。
  2. 低偏差高方差时,预测值基本落在真实值周围,但很分散,此时方差较大,说明模型的稳定性不够好。
  3. 高偏差低方差时,预测值与真实值有较大距离,但此时值很集中,方差小;模型的稳定性较好,但预测准确率不高,处于"一如既往地预测不准"的状态。
  4. 高偏差高方差时,是我们最不想看到的结果,此时模型不仅预测不准确,而且还不稳定,每次预测的值都差别比较大。
    在这里插入图片描述

产生原因

  • 过拟合:
    过拟合主要是因为给定的数据集相对过于简单,使得模型在拟合函数时过分地考虑了噪声等不必要的数据间的关联。或者说相对于给定数据集,模型过于复杂、拟合能力过强
  • 欠拟合:
    对于给定数据集,欠拟合的原因大多是模型不够复杂、拟合函数的能力不够。

解决方案

防止欠拟合

  1. 做特征工程,添加更多的特征项。即提供的特征不能表示出那个需要的函数;
  2. 减少正则化参数。即使得模型复杂一些;
  3. 使用更深或者更宽的模型。
  4. 使用集成方法。融合几个有差异的弱模型,使其成为一个强模型。
  5. 减少正则化参数

防止过拟合

  1. 数据扩增:
    人为增加数据量,可以用重采样、上采样、增加随机噪声、GAN、图像数据的空间变换(平移旋转镜像)、尺度变换(缩放裁剪)、颜色变换、增加噪声、改变分辨率、对比度、亮度等。其中增加噪声,可以在原始数据上直接加入随机噪声(更接近真实环境),也可以在权重上增加噪声。

  2. 直接降低模型复杂度:
    即减少模型参数数量。例如:对于LR,减少目标函数的因子数;对于DT,减少树的深度、剪枝等;对于DNN,减少层数和每层权向量长度。

  3. 针对神经网络,采用dropout方法:
    间接减少参数数量,也相当于进行了数据扩增。弱化了各个参数(特征)之间的单一联系,使起作用的特征有更多组合,使从而模型不过分依赖某个特征。

  4. 提前停止训练:
    也就是减少训练的迭代次数。从上面的误差率曲线图可以看出,理论上能够找到一个训练程度,此时验证集误差率最低,视为拟合效果最好的点。

  5. 多模型投票方法:
    类似集成学习方法的思想,不同模型可能会从不同角度去拟合,互相之间取长补短,即使单独使用某个模型已出现过拟合,但综合起来却有可能减低过拟合程度,起到正则作用,提高了泛化效果。特别是使用多个非常简单的模型,更不容易产生过拟合

  6. 添加正则项,也叫正则化(regularization)
    正则项的作用主要是通过λ参数来控制模型的复杂度

  7. 针对DNN)Batch Normalization
    BN,既能够提高泛化能力,又大大提高训练速度,现在被广泛应用在DNN中的激活层之前。BN的提出最初是针对DNN在训练过程中会出现数据内部的协方差偏移现象,导致输出数据分布发生额外的改变,并随着层数的增加偏移加剧,使得模型不得不根据输出分布的改变重新学习,这又导致训练速度减慢。公式如下:
    在这里插入图片描述
    具体过程: 首先对某层的输入样本做白化处理,等价于零均值化处理(均值为0,方差为1),使输入样本之间互不相关,且每层的输入服从相同分布,克服了内部协方差偏移的影响。采用分批处理数据的方式,减少了计算量。

    主要优势: 减小了梯度对参数大小和初始值的依赖,将参数值(特征)缩放在[0,1]区间(若针对Relu还限制了输出的范围),这样反向传播时梯度控制在1左右,使网络即使在较高学习率下也不易发生梯度爆炸或弥散(也预防了在使用sigmoid作为激活函数时训练容易陷入梯度极小饱和或极大的极端情况)。

正则化

数学基础:
范数,用||x||表示范数
向量范数是衡量某个向量空间中向量的大小或长度;矩阵范数表征矩阵引起变化的大小。一种非严密的解释就是,对应向量范数,向量空间中向量都是有大小的,这个大小如何度量,就是用范数来度量的,不同的范数都可以来度量这个大小,就好比米和厘米都可以来度量长度一样;对于矩阵范数,学过线性代数,我们知道,通过运算AX=B,可以将向量X变化为B,矩阵范数就是来度量这个变化大小的。

L-P范数
L-P范数不是一个范数,而是一组范数,其定义如下:
在这里插入图片描述
根据P的变化,范数也有着不同的变化,一个经典的有关P范数的变化图如下:
在这里插入图片描述

L0范数

当p=0时,也就是L0范数,由上面可知,L0范数并不是一个真正的范数,它主要是被用来度量向量中非零元素的个数。定义为:
在这里插入图片描述

这里就有点问题了,我们知道非零元素的零次方为1,但零的零次方,非零数开零次方都是什么鬼,很不好说明L0的意义,所以在通常情况下,大家都用的是如下公式来表示向量x中非零元素的个数。
在这里插入图片描述
对于L0范数,其优化问题为:
在这里插入图片描述
即能令Ax=b成立的维度最少数量的x,即寻找一个向量,能够使Ax=b,并且x中所包含的特征比较少。在实际应用中,由于L0范数本身不容易有一个好的数学表示形式,给出上面问题的形式化表示是一个很难的问题,故被人认为是一个NP难问题。所以在实际情况中,L0的最优问题会被放宽到L1或L2下的最优化。

L1范数

L1范数是我们经常见到的一种范数,它主要表示各个参数绝对值之和, 定义如下:

在这里插入图片描述

表示向量中非零元素的绝对值之和。(一个向量中非零元素的绝对值之和,例如向量[1,-1,2],它的L1范数是|1||+||-1||+||2||=4||。
L1范数有很多的名字,例如我们熟悉的曼哈顿距离最小绝对误差等。使用L1范数可以度量两个向量间的差异,如绝对误差和(Sum of Absolute Difference):
在这里插入图片描述
对于L1范数,它的优化问题如下:
在这里插入图片描述
由于L1范数的天然性质,对L1优化的解是一个稀疏解,因此L1范数也被叫做稀疏规则算子。通过L1可以实现特征的稀疏,去掉一些没有信息的特征,例如在对用户的电影爱好做分类的时候,用户有100个特征,可能只有十几个特征是对分类有用的,大部分特征如身高体重等可能都是无用的,利用L1范数就可以过滤掉。

L2范数

L2范数是我们最常用的范数了,我们用的最多的度量距离欧氏距离就是一种L2范数,主要标识各个参数的平方的和的开方值, 定义如下:

在这里插入图片描述

表示向量元素的平方和再开方。
像L1范数一样,L2范数也可以度量两个向量间的差异,如平方差和(Sum of Squared Difference):
在这里插入图片描述
对于L2范数,它的优化问题如下:
在这里插入图片描述
L2范数通常会被用来做优化目标函数的正则化项,防止模型为了迎合训练集而过于复杂造成过拟合的情况,从而提高模型的泛化能力。

讨论

  • 实现参数的稀疏有什么好处
    1. 可以简化模型,避免过拟合。因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据效果可能很差。
    2. 参数变少可以使整个模型获得更好的可解释性。
  • 参数越小值代表模型越简单吗
    是的。为什么参数越小,说明模型越简单呢?这是因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大。

参考

  1. https://www.cnblogs.com/yejintianming00/p/9338917.html#_Toc519803895
  2. https://blog.csdn.net/dyx810601/article/details/82141789
  3. https://blog.csdn.net/tuai4532/article/details/81208243
  4. https://blog.csdn.net/qq_26598445/article/details/82844393
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型的过拟合与欠拟合 的相关文章

  • vue+echarts 实现地图tooltip点击事件;toolTip数据动态渲染;同时鼠标滑过涟漪点时实现地图多区域联动

    最终做出来的效果是这样的 最近做项目时 遇到这样的需求 1 toolTip上的数据根据后台动态渲染 2 鼠标移入地图涟漪点时显示tootTip 点击toolTip上的文字 携带动态数据id进行路由跳转 3 鼠标移入地图涟漪点 与涟漪点相关的
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 文章目录 1 Linux系统的使用经验 2 Linux各目录的作用 3 服务器注意事项 1 Linux系统的使用经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 包括硬件 Linux
  • 浅谈A/B测试 ,看这一篇就足够了

    随着流量红利的逐渐消失 越来越多的公司开始重视数据驱动 试验驱动的精细化运营思想 并积极进行实践 有些公司在考虑采购第三方试验平台 有些公司考虑自建试验平台 我们和这样的公司都有深入的接触 发现很多公司对试验平台应该是什么样的 有什么样的坑
  • Java中使用同步代码块、同步方法(synchronize关键字)和Lock锁解决线程安全问题

    目录 一 线程安全概述 二 线程同步 同步代码块 同步方法 使用Lock锁 三 注意事项 四 synchronize和lock的异同 一 线程安全概述 生活中我们往往会出现多个人共用同一个事物的情况 比如说两个人可以共用一个游戏账号 这样两
  • 优化问题的拉格朗日Lagrange对偶法原理

    首先我们定义一般形式的求解x的优化问题 表示优化的目标函数 上述为最小优化 实际上最大优化可以改写为的形式 表示第i个不等式约束 表示等式约束 1 Lagrange对偶问题 上述优化问题的拉格朗日Lagrange对偶法求解 是将上述带约束的
  • 【C语言初学必看】一知半解的for循环嵌套for循环

    前言 目录 初学C语言 常常遇到for循环中嵌套个for循环 初学者对于这种形式总是一知半解 这次我就整理了常见的for循环嵌套for循环的题目 我们一起争取一举拿下这类题 学废他们 以后再见到就不怕啦 每天都要学一点呀 加油 奋斗的我们
  • Pytorch学习笔记

    文章目录 配置环境 机器学习中的分类与回归问题 PyTorch的基本概念 Tensor的类型 Tensor的创建 Tensor的属性 Tensor的算术运算 in place操作 Pytorch中的广播机制 取整 取余运算 Tensor的比
  • 使用 AntV X6 + vue 实现单线流程图

    使用 AntV X6 vue 实现单线流程图 X6 是 AntV 旗下的图编辑引擎 提供了一系列开箱即用的交互组件和简单易用的节点定制能力 方便我们快速搭建 DAG 图 ER 图 流程图等应用 官方文档 安装 yarn add antv x
  • react笔记_10react路由

    目录 什么叫做路由 路由组件与一般组件区别 react中配置路由 1 下载 2 注册路由 Switch Route组件的三个互斥属性 component render children 3 导航区 路由跳转 编程式导航 在新窗口打开页面 在
  • 霍尔增量式编码器左右车轮线速度的计算

    对于霍尔式编码器的左右轮线速度计算 首先线速度 距离s 时间 t 要获得距离S 也就是轮子在一段时间内跑过的距离 要先知道一下两个参数 1 轮子的半径 r 2 轮子转动一圈的脉冲数 cnt 轮子转动一圈的脉冲数 如电机我们选用减速比为1 9
  • docker以及docker-compose安装

    centos7下docker安装 官方安装文档 https dockerdocs cn engine install centos index html 安装依赖包 yum install y yum utils device mapper
  • 2020-12-06

    实验四 CTF实践 实验目的 通过对目标靶机的渗透过程 了解CTF竞赛模式 理解CTF涵盖的知识范围 如MISC PPC WEB等 通过实践 加强团队协作能力 掌握初步CTF实战能力及信息收集能力 熟悉网络扫描 探测HTTP web服务 目
  • 报错 AttributeError: ‘WebDriver‘ object has no attribute ‘find_elements_by_xpath‘ 解决方法

    报错 AttributeError WebDriver object has no attribute find elements by xpath 解决方法 汉 AttributeError WebDriver 对象没有属性 find e
  • Hbase Shell操作

    文章目录 Hbase Shell操作 1 创建表 2 数据库表基本操作 2 1 添加数据 2 2 删除数据 2 2 1 delete命令 2 2 2 deleteall命令 2 3 查看数据 2 3 1 get命令 2 3 2 scan命令
  • 【Twinkle】Chrome快捷键是真的好用

    1 标签页和窗口快捷键 快捷键 说明 Ctrl n 打开新窗口 Ctrl shift n 在隐身模式下打开新窗口 Ctrl t 打开新的标签页 常用 Ctrl Shift t 重新打开最后关闭的标签页 Ctrl Tab 或 Ctrl Pgd
  • java聊天室的设计与实现代码

    聊天室是一个简单的通信应用 可以帮助您与客户和朋友保持联系 并且可以让您更轻松地与其他员工联系 然而 您将不得不确保每个人都知道他们正在做什么 一旦聊天室开始 它就会变得非常复杂 因为有许多用户可能会同时登录 例如 如果您有一个新的工作机会
  • openGL之API学习(六十二)glBufferData

    往gpu缓冲区写入数据 void glBufferData GLenum target GLsizeiptr size const GLvoid data GLenum usage target Specifies the target t
  • 用redis作为消息推送

    1首先写配置监听文件 Configuration EnableCaching public class RestRedisConfig extends CachingConfigurerSupport Value redis server
  • java.awt GUI报错及相关问题解决方案

    Caused by java awt HeadlessException No X11 DISPLAY variable was set but this program performed an operation which requi

随机推荐

  • CLIP-as-service 升级啦!

    CLIP 是一个强大的模型 能够很好地判别文本和图片是否相关 但将其集成到现有系统中需要大量时间精力 以及机器学习知识 CLIP as service CAS 是一种易于使用的服务 具有低延迟和高度可扩展性 可以作为微服务轻松集成到现有解决
  • QT 如何复制与粘贴?(QClipboard)

    这里用QMenu菜单栏来展示示例一下 QMenu m ProgramBtnGroupMenu QAction m CopyEffectAction 添加操作 m ProgramBtnGroupMenu new QMenu this m Pr
  • pip 和 conda 的联系区别、安装包方法、换源方法

    pip 和 conda 的联系与区别 pip 是 Python 包管理工具 conda 是一个开源的软件包管理系统和环境管理系统 pip 对Python包进行管理 而 conda 不仅能进行包管理 还能够创建隔离的环境 该环境可以包含不同版
  • 查看隐藏文件怎么做?4个简单方法分享

    朋友们 想问问大家如果设置了隐藏文件 想查看的时候应该怎么进行查看呀 有没有朋友可以教教我 为了保护电脑的隐私 我们有时候可能会给电脑设置某些隐藏的文件 这些隐藏的文件我们是无法看到的 如果我们想查看隐藏的文件应该怎么查看呢 本文小编将给大
  • 复制即可用!C语言读取文件所有内容 并输出,c语言将浏览器网页cookie转为json格式,c语言将网页cookie转为python的webdriver.add_cookie()参数所需格式

    C语言读取文件所有内容并输出 c语言将浏览器网页cookie转为json格式 c语言将网页cookie转为python的webdriver add cookie 参数所需格式 代码在下方 复制即可用 运行结果截图 转化出的普通json格式结
  • Springboot框架整合Spring Data JPA操作数据

    一 Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架 JPA 规范的基础上封装的一套 JPA 应用框架 底层使用了 Hibernate 的 JPA 技术实现 可使开发者用极简的代码即可
  • 如何学习软件测试

    软件测试是确保软件质量的重要手段 在现代软件开发中 软件测试已经成为了必不可少的一环 因为它可以发现并纠正软件中的缺陷和错误 从而提高软件的可靠性 可用性和安全性 因此 学习软件测试对于想要从事或已经从事软件开发的人来说是非常重要的 以下是
  • springboot同时引入mysql5和mysql8,多数据源驱动解决方案

    springboot项目需要配置多数据源 同时引入mysql5和mysql8的时候 框架默认8版本的驱动 调用从库mysql5是会报驱动错误 CLIENT PLUGIN AUTH is required 解决办法 首先明确 mysql8配置
  • Qt_如何关联头文件、源文件和ui文件?

    1 头文件与源文件 首先头文件和源文件就不多说了 头文件放声明 源文件放定义 2 关于ui文件 我们知道在新建项目的时候 可以选择添加 ui和不添加两种 当添加上ui 文件的时候 我们可以利用designer来添加控件 直观上看到界面的布局
  • 一台windows环境下安装多个MySQL服务

    将第一个安装的MySQL安装文件夹复制一份并重命名 修改my ini的配置文件内容 把第二个MySQL服务配置环境变量 D Program Files MySQL MySQL3307 Server 5 5 bin 添加到系统变量path中
  • gitee的详细使用教程

    文章目录 前言 一 将本地文件上传至gitee仓库中 1 创建本地文件夹 2 将本地文件初始化为本地仓库 3 上传至本地仓库中 1 将文件从工作区存入暂缓区 2 将暂缓区的文件存入本地仓库中 4 还原已删除文件 5 将本地仓库文件上传至gi
  • Android(安卓)上传文件到阿里云点播,阿里云点播转码

    Android 安卓 上传文件到阿里云点播 阿里云点播转码 文章目录 Android 安卓 上传文件到阿里云点播 阿里云点播转码 一 登录阿里云点播平台配置添加转码模板组 1 需要什么参数 可自行填写 然后保存 如图 2 把获取的模板 ID
  • 解决安装mysql与mariadb冲突问题(卸载干净mariadb)

    阿里云服务器 centos7 6 a 查询mariadb libs的包名 rpm qa grep mariadb b 卸载 rpm e mariadb libs 5 5 60 1 el7 5 x86 64 error Failed depe
  • 基于线程池模型的讨论与完整代码演示

    线程池引入的必要性 在网络服务器中 包括大量的web服务器 它们都需要在单位时间内必须处理相当数目的接入请求以及数据处理 通常在传统多线程服务器中是这样实现的 一旦有个请求到达 就创建一个线程 由该线程执行任务 任务执行完毕后 线程就退出
  • 连接MySQL错误create connection SQLException, url jdbcmysqllocalhost3306

    具体报错如下 2018 11 12 16 14 21 704 ERROR 9752 eate 1537371824 com alibaba druid pool DruidDataSource create connection SQLEx
  • 鉴权认证的基本概念

    最近项目中用到 学习了一下 记录下来后续有时间再继续研究 单点登录 单点登录SSO Single Sign On 简单点就是在一个多系统共存的环境下 用户在一处登录后 就不用在其他系统中登录 也就是用户的一次登录能得到其他所有系统的信任 单
  • 这是一篇关于如何成为一名AI算法工程师的长文

    点击上方 Datawhale 选择 星标 公众号 第一时间获取价值内容 这是一篇关于如何成为一名AI算法工程师的长文 经常有朋友私信问 如何学python呀 如何敲代码呀 如何进入AI行业呀 正好回头看看自己这一年走过的路 进行一次经验总结
  • Arduino离线安装Esp8266

    首先安装ArduinoIDE 可以直接去github官网下载 链接 安装完成后 打开Arduino IDE 文件 gt 首选项 在 其他开发板管理器网址 输入框中 填入以下网址 https www arduino me package es
  • mysql下载与安装

    1 网址 http www mysql com 2 进入网址 选择DOWNLOADS 下载 3 选择社区版 4 进入之后选择如下都可以 5 下载64位的 点进来都是最新的版本 点击如下可选择下载之前的版本 6 安装
  • 模型的过拟合与欠拟合

    过拟合与欠拟合 定义 过拟合 High Viarance 欠拟合 High Bias 误差 Error 产生原因 解决方案 防止欠拟合 防止过拟合 正则化 L0范数 L1范数 L2范数 讨论 参考 定义 首先要确定的两个概念是Underfi