大白话给你说清楚什么是过拟合、欠拟合以及对应措施

2023-11-04

开始我是很难弄懂什么是过拟合,什么是欠拟合以及造成两者的各自原因以及相应的解决办法,学习了一段时间机器学习和深度学习后,分享下自己的观点,方便初学者能很好很形象地理解上面的问题,同时如果有误的地方希望大家在评论区留下你们的砖头,我会进行纠正

无论在机器学习还是深度学习建模当中都可能会遇到两种最常见结果,一种叫过拟合(over-fitting )另外一种叫欠拟合(under-fitting)。

首先谈谈什么是过拟合呢?什么又是欠拟合呢?网上很直接的图片理解如下:


所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。打个比喻就是当我需要建立好一个模型之后,比如是识别一只狗狗的模型,我需要对这个模型进行训练。恰好,我训练样本中的所有训练图片都是二哈,那么经过多次迭代训练之后,模型训练好了,并且在训练集中表现得很好。基本上二哈身上的所有特点都涵括进去,那么问题来了!假如我的测试样本是一只金毛呢?将一只金毛的测试样本放进这个识别狗狗的模型中,很有可能模型最后输出的结果就是金毛不是一条狗(因为这个模型基本上是按照二哈的特征去打造的)。所以这样就造成了模型过拟合,虽然在训练集上表现得很好,但是在测试集中表现得恰好相反,在性能的角度上讲就是协方差过大(variance is large),同样在测试集上的损失函数(cost function)会表现得很大。

所谓欠拟合呢(under-fitting)?相对过拟合欠拟合还是比较容易理解。还是拿刚才的模型来说,可能二哈被提取的特征比较少,导致训练出来的模型不能很好地匹配,表现得很差,甚至二哈都无法识别。

那么问题来了,我们需要怎么去解决过拟合和欠拟合的问题呢??

过拟合:

首先我们从上面我们可以知道,造成过拟合的原因有可以归结为:参数过多。那么我们需要做的事情就是减少参数,这里有两种办法:

1、回想下我们的模型,假如我们采用梯度下降算法将模型中的损失函数不断减少,那么最终我们会在一定范围内求出最优解,最后损失函数不断趋近0。那么我们可以在所定义的损失函数后面加入一项永不为0的部分,那么最后经过不断优化损失函数还是会存在。其实这就是所谓的“正则化”。

下面这张图片就是加入了正则化(regulation)之后的损失函数。这里m是样本数目,landa(后面我用“t”表示,实在是打不出)表示的是正则化系数。

注意:当t(landa)过大时,则会导致后面部分权重比加大,那么最终损失函数过大,从而导致欠拟合

   当t(landa)过小时,甚至为0,导致过拟合。

2、对于神经网络,参数膨胀原因可能是因为随着网路深度的增加,同时参数也不断增加,并且增加速度、规模都很大。那么可以采取减少神经网络规模(深度)的方法。也可以用一种叫dropout的方法。dropout的思想是当一组参数经过某一层神经元的时候,去掉这一层上的一部分神经元,让参数只经过一部分神经元进行计算。注意这里的去掉并不是真正意义上的去除,只是让参数不经过一部分神经元计算而已。

另外增大训练样本规模同样也可以防止过拟合。

欠拟合:

其实个人觉得欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加多点特征点,这些都是很好解决欠拟合的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大白话给你说清楚什么是过拟合、欠拟合以及对应措施 的相关文章

随机推荐

  • vscode操作vue项目的相关步骤

    1 vscode下载安装https code visualstudio com vue插件的安装 1 vetur 该插件是vue文件基本语法的高亮插件 在插件窗口中输入vetur点击安装插件就行 装好后点击文件 gt 首选项 gt 设置 打
  • 合并有序的链表

    合并有序的链表 这里是升序 只是改变指针的方向O n 也是一道超经典的题目 完整实现如下 include
  • iOS自定义弹出窗口

    链接 https www jianshu com p b9bba621b295 先看示例 最终效果图 gif 首先搭建好基础界面 void viewDidLoad super viewDidLoad 设置背景色 self view back
  • [LeetCode]面试题 17.05. 字母与数字

    给定一个放有字母和数字的数组 找到最长的子数组 且包含的字母和数字的个数相同 返回该子数组 若存在多个最长子数组 返回左端点下标值最小的子数组 若不存在这样的数组 返回一个空数组 示例 1 输入 A 1 B C D 2 3 4 E 5 F
  • linux脚本中使用ftp,在shell脚本中使用ftp的方法分享

    有时 我们需要通过ftp传送文件到另一台机器 通常情况下 可以通过交互式的命令行来完成 但对于数据量较多的情况来讲 这样的操作会很烦琐 此时 可以写一段shell脚本 实现ftp文件的自动传输即可 可能的问题 在shell脚本中用FTP传输
  • python2.7 使用super关键词 报错 TypeError: must be type, not classobj 解决办法

    原创作品 允许转载 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http yeelone blog 51cto com 1476571 971591 今天遇到这个错误 Traceback most re
  • 在Oracle中创建新用户, 并且赋予该用户查看其他用户视图的权限

    本文由Markdown语法编辑器编辑完成 1 需求提出 在HIS与第三方系统进行集成时 某第三方系统需要访问HIS数据库的视图而非全部的数据库表 HIS的数据库为Oracle 因此需要在Oracle中在原有用户的基础上 再增加一个用户 该用
  • 什么是NetDevOps

    NetDevOps 是一种新兴的方法 它结合了 NetOps 和 DevOps 的流程 即将网络自动化集成到开发过程中 NetDevOps 的目标是将虚拟化 自动化和 API 集成到网络基础架构中 并实现开发和运营团队之间的无缝协作 开发运
  • npm 查看包的所有版本号

    这里以 vue cli 脚手架为例 npm view vue cli versions dengzemiao dengzemiaodeMacBook Pro uniapp npm view vue cli versions 3 0 0 al
  • gazebo仿真与ros控制器学习

    gazebo是一个功能强大的模拟器 尤其适合机器人的运动和控制模拟 但也存在很多bug 官方学习地址 http gazebosim org tutorials 包括了所有的教程 从初级中级到高级 也可以按照分类进行学习 这里主要讲与ros控
  • 80端口被占用时的终极解决方法

    摘要 之前在某次安全测试时 遇到一个80端口被占用的坑 将解决方法共享出来 使用netstat ano 命令查看是哪个进程正在占用80端口 之前在某次安全测试时 遇到一个80端口被占用的坑 将解决方法共享出来 使netstat ano 命令
  • linux nexus 启动失败_学习笔记之——nexus(四)记一次nexus故障

    一 故障描述 nexus服务器最初配置为4C8G 随着业务量的暴增 终于在某一天不堪重负 OOM了 排查后 增加内存到16G 再次启动 然后看似正常 然后却发生了诡异的事件 二 排查过程 问题一 查看日志 发现日志报错如下 报错日志1 经确
  • imx6ull视频监控项目,从kernel,buildroot,nginx,ffmpeg实现摄像头推流,vlc及web拉流

    写这一篇目的是记录自己使用buildroot 构建根文件系统 实现摄像头推流到VLC 及 web端 主要介绍的是 1 buildroot构建根文件系统 2 ffmpeg 及nginx 的配置 3 Linux内核构建 4 如何将摄像头的视频在
  • 软件项目管理课程授课教案

    序 软件项目管理概述 第一篇 软件项目初始 第1章 软件项目初始过程 第二篇 软件项目计划 第2章 软件项目范围计划 第3章 软件项目进度计划 第4章 软件项目成本计划 第5章 软件项目质量计划 第6章 软件项目人力资源计划 第7章 软件项
  • 灵创系统服务器,服装ERP-灵创软件-ICSCM供应链管理系统

    服装ERP 灵创软件 ICSCM供应链管理系统 一 产品概述 ICSCM供应链管理系统是基于品牌营运商和产品生产商之间紧密沟通 风险利润分担的大前提下诞生的一套全B S结构的系统 它是一种致力于在企业与供应商之间建立和维持长久的紧密合作伙伴
  • STM32系列(HAL库)——F103C8T6获取DHT11温湿度串口打印

    本文参考此篇博客并在其基础上进行了修改 STM32F103驱动DHT11温湿度传感器 STM32MXcube HAL 在此特别鸣谢原文博主 1 软件准备 1 编程平台 Keil5 2 CubeMX 3 XCOM 串口调试助手 2 硬件准备
  • Manifest.json文档说明

    Manifest json文件是5 移动App的配置文件 用于指定应用的显示名称 图标 应用入口文件地址及需要使用的设备权限等信息 是扩展的配置文件 指明了扩展的各种信息 一个manifest json格式如下 必须的字段3个 name M
  • Spring bean生命周期详解

    Spring Bean的完整生命周期从创建Spring容器开始 直到最终Spring容器销毁Bean 这其中包含了一系列关键点 Spring bean生命周期 四个阶段 Bean的实例化阶段 Bean的设置属性阶段 Bean的 初始化阶段
  • token续期

    需求 项目前后端分离 采用token jwt生成 方式作为登录及接口验证 自然而然就会涉及token超时 影响用户体验的问题 要解决的就是如果用户一直点击页面 就不应该出现超时及重新登录 只有用户在设置的超时时间内 一次页面操作都没有 才定
  • 大白话给你说清楚什么是过拟合、欠拟合以及对应措施

    开始我是很难弄懂什么是过拟合 什么是欠拟合以及造成两者的各自原因以及相应的解决办法 学习了一段时间机器学习和深度学习后 分享下自己的观点 方便初学者能很好很形象地理解上面的问题 同时如果有误的地方希望大家在评论区留下你们的砖头 我会进行纠正