从0开始学习机器学习--Day19--学习曲线

news2024/11/26 10:44:06

一般来说,如果一个算法的表现不理想,那么多半是因为出现了欠拟合或过拟合问题,这种时候我们要做的就是搞清楚出现的是偏差问题还是方差问题,亦或是二者皆有,这有助于我们精准定位问题所在。

之前,我们发现假设函数多项式的次数越高,代价函数的误差就越小,假设我们把多项式的次数作为横坐标,训练集代价函数的误差为纵坐标画图,呈现出来的应该是随着横坐标增大纵坐标不断减小的图像:

随着多项式次数增加两种代价函数的变化情况

但如果换做是验证集的假设函数,图像又有所不同。可以看到在 d=2的时候,其误差确实小了,这反映的是其预测值和实际值之间的误差变小,但当 d=4时,出现了过拟合的情况,此时预测值与实际值之间的差又变大,所以其曲线又往上升而不是继续下降,这进一步地说明了为什么我们采用验证集的参数而不是直接用训练集的。

也就是说,通过比较训练集和验证集代价函数的误差,可以确定到底是出现了什么问题。假如两者都很大且两者差值较小,则说明式出现了高偏差、欠拟合的情况,应该适当增大多项式的次数;如果训练集的误差远远小于验证集的误差,则说明出现了高方差、过拟合的情况,需要适当减小多项式的次数。

正则化和偏差、方差(Regularization and bias/variance)

在之前学习正则化的时候,我们知道通过正则化参数,可以挑选出不太重要的参数项,从而决定多项式的次数。但之前我们基本默认 \lambda =1 or \lambda =10,那么在实际情况中我们该怎么挑选合适的\lambda呢?

假设我们的假设函数是4次项的多项式,我们按从小到大的顺序将不同的\lambda带入代价函数算出参数,注意这里的\lambda是按照2倍的速度增长的,当增加到12次时,大概是10.24,这里省略了小数点:

带入不同\lambda值计算参数

计算完结果后,再跟上述一样带入到验证集的代价函数中去计算验证集误差,其中误差最小对应的\lambda就是我们想要的正则化参数。当然,就算得到了结果,也还是要将在验证集得到的参数带入到测试集的代价函数进行最终验证。

同样的,我们画出训练集代价函数和验证集代价函数关\lambda 的图像:

随着\lambda增加两种代价函数的变化情况

可以看到,当\lambda很大时,此时函数处于欠拟合高偏差的问题中,训练集和验证集的代价函数误差都会很大且很接近;当\lambda很小时,函数处于过拟合、高方差的情况,训练集由于是用自己的数据拟合,拟合的好,误差很小,而验证集的误差则远远大于训练集。一般来说,验证集代价函数的误差最小时,该点的\lambda应该是刚好适合假设函数的正则化参数。

学习曲线(Learning curves)

在上述说法中我们通过对比两种代价函数的误差表现来判断出现什么问题,事实上,我们一般采用画出学习曲线的方式来判断算法的表现好坏,横坐标是训练样本个数,纵坐标是代价函数的误差。但与以往不同,我们对横坐标加以限制,用很少量的样本个数(10,20,30等等)来观察两种代价函数的表现。

两种代价函数误差关于样本个数m的图像

假设我们采用二次幂的多项式来拟合,可以观察到,当样本个数m很小(1-3)时,曲线会拟合得很好,样本个数到4的时候,能看出曲线已经开始有些偏离了,也就是说,随着样本个数的增加,训练集的代价函数的误差也会随之增大。对于验证集的代价函数来说,在样本个数很小的时候,其误差会很大,原因是其参数的基础只是几个样本,其对于新样本的效果自然很低;当样本个数逐渐增加,算法分析的特征越来也多,意味着其对于新样本的判断能力在逐渐增加,表现在图像上则是验证集代价函数的误差在逐渐减小。

高偏差时两种误差的表现

可以观察到,两种曲线跟刚刚相比也是类似的变化,当样本更加到一定程度时其误差基本保持不变,与其不同的是,由于这里是用直线来拟合,样本个数过大而参数过小,所以当样本个数增加到一定值时,两者的误差基本相等。

高方差时两种误差的表现

如果换成高次幂比如100次方,其曲线与上述相比,训练集的误差在样本数量增加到一定程度后还是基本不变,但验证集的误差则会一直下降,这是因为样本的个数的增加对验证集来说,其由于对数据更敏感相当于接触到了更多的变化来排除原本数据的一些不好的数据(俗称“噪声”),这说明增加样本数量对于高偏差的情况基本没有帮助,但在高方差时表现良好。

在之前,我们总结了一些可能可以改善算法的方法,在这里对这些方法的用途做一个概括。

对于高方差问题来说:

  1. 增加样本个数,使验证集代价函数感受到更多的变化,使其误差持续减小;

  2. 减少特征量,让函数专注在有用的特征上,加强拟合效果;

  3. 增大\lambda,能够增加特征使其拟合效果更好。

对于高偏差问题来说:

  1. 增加特征量或多项式特征,也就是增加函数的复杂程度,使其更贴合训练样本;

  2. 减小\lambda,能够减少不必要的特征和“噪声”,减弱过拟合效果。

而在使用神经网络来构建模型时,与之相对的,使用较少的隐藏层和隐藏单元,在架构中所用到的参数就不会很多,会出现欠拟合的现象,其计算量较少;假如用很多隐藏单元或者很多层隐藏层,则会出现过拟合现象,不过我们可以通过加入正则项来解决这个问题(一般为了避免我们会直接添加,而不是等到了出现过拟合再作正则化操作),所以一般越大型、越复杂的神经网络效果越好。

视频参考链接:https://www.bilibili.com/video/BV1By4y1J7A5?spm_id_from=333.788.player.switch&vd_source=867b8ecbd62561f6cb9b4a83a368f691&p=64

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中,我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页,逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目,这是一个循序渐进的过程,适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

LLM训练”中的“分布式训练并行技术;分布式训练并行技术

目录 “LLM训练”中的“分布式训练并行技术” 分布式训练并行技术 数据并行 流水线并行:按阶段(stage)进行切分 张量并行 序列并行 多维混合并行 自动并行 MOE并行 重要的分布式AI框架 “LLM训练”中的“分布式训练并行技术” 随着深度学习技术的不断发展,特别是…

论文阅读:Computational Long Exposure Mobile Photography (二)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章,介绍如何在手机摄影中实现长曝光的一些拍摄效果。 Abstract 长曝光摄影能拍出令人惊叹的影像,用运动模糊来呈现场景中的移动元素。它通常有两种模式,分别产生前景模糊或…

测试概念以及测试bug

关于测试的概念 什么是需求? 需求分为用户需求和软件需求。 软件需求可以作为开发和测试工作的依据,而用户需求不一定是合理的,这里的不合理有很多的角度:技术角度上,市场需求上,投入成本和收益比噔噔。…

mac m1 docker本地部署canal 监听mysql的binglog日志

mac m1 docker本地部署canal监听mysql的binglog日志(虚拟机同理) 根据黑马视频部署 1.docker 部署mysql 1.docker拉取mysql 镜像 因为m1是arm架构.需要多加一条信息 正常拉取 docker pull mysql:tagm1拉取 5.7的版本. tag需要自己指定版本 docker pull --platform linux/x…

C++之旅——入门

Hello,各位小伙伴们,前几期我们学习了C语言和数据结构,有了一定的基础之后我们来挑战新的语言——C。 目录 一、初识C 1>C发展历史 2>C版本更新 3>C的热度 4>C的学习难度 5>C学习相关书籍 二、第一个C代码 三、C基础 …

Flutter中文字体设置指南:打造个性化的应用体验

在使用Flutter进行开发时,可能会遇到中文字体显示不正常或者字体不符合设计需求的情况。Flutter默认的中文字体往往无法满足某些用户对个性化和美观的需求。今天,我们就来详细探讨如何在Flutter应用中设置中文字体,并结合不同场景提供相应的解…

4.1 软件设计概要

软件设计概要 1、 软件设计的概念和设计质量1.1 软件设计基本任务1.2 设计模型1.3 软件设计特点1.4 设计质量属性1.5 设计指导原则 2、 设计相关八大概念抽象体系结构设计模式模块化信息隐藏功能独立精化重构 3、 四类设计技术概要3.1 数据设计3.2 体系架构设计体系结构组织和细…

MySQL表的增删改查(CRUD2)

美好的一天又开始了,大家今天有没有学习呢?没学的话,开始跟随和博主一起对MYSQL的学习吧!!! 复习: CRUD新增1.新增 insert into 表名 [(列名[,列名,列名...])] values (值[,值,值.…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始,苹果推出了全新的测试机制:Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式,并且使得单元测试更加灵动自由,更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件,需要通过一列的文件名称,按照规则给批量上传图片附件。 原始文件: 成功后文件: 二、实现方法 1. 使用【wps】工具打开Excel文件,将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…

Springboot项目报错记录

SpringBoot测试报错:Unable to find a SpringBootConfiguration, you need to use Context 该测试类所在测试包test下的包名和类路径java下的包名不一致导致的 引发以下报错 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need…

RabbitMQ 高级特性——消息分发

文章目录 前言消息分发RabbitMQ 分发机制的应用场景1. 限流2. 负载均衡 前言 当 RabbitMQ 的队列绑定了多个消费者的时候,队列会把消息分发给不同的消费者,每条消息只会发送给订阅列表的一个消费者,但是呢,RabbitMQ 默认是以轮询…

深度学习:bert模型

multi-headed机制 1、通过不同的head得到多个特征表达,一般8个head 2、将所有特征拼接在一起 3、降维,将Z0~Z7连接一个FC全连接实现降维 多层堆叠 位置编码 如何实现位置编码? (1)为每个时间步添加一个0-1范围内的数…

Vue实战学习(2)(Vue快速入门(快速构建一个局部Vue项目))

目录 一、Vue快速入门。 (1)快速入门的案例需求。 (2)原生js解决。 (3)使用Vue解决。 1、准备一个html页面。且该页面需要引入Vue模块。 2、创建Vue程序的应用实例。 3、准备html元素(如div&…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录(三)之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

Spring WebFlux 核心原理(2-3)

1、Project Reactor 高级 1.1、响应式流的生命周期 要理解多线程的工作原理以及 Reactor 中实现的各种内部优化,首先必须了解 Reactor 中响应式类型的生命周期。 1.1.1、组装时 流生命周期的第一部分是组装时(assembly-time)。 Reactor 提供…

Python爬虫与Web渗透测试入门指南——初学者防踩雷

目录 Python爬虫与Web渗透测试入门指南一、学习方向和基础知识Python爬虫学习方向Web渗透学习方向 二、具体知识点总结三、学习流程和典型案例案例1:Python爬虫 - 简单网页数据爬取案例2:Web渗透 - SQL注入漏洞检测与利用案例3:Python爬虫 - …

apache-seata-2.1.0 AT模式使用篇(配置简单)

最近在研究seata的AT模式,先在本地搭建了一个演示demo,看看seata是如何使用的。在网上搜的demo,配置相对来说都比较多。我最终搭建的版本,配置较少,所以写篇文章分享下,希望能帮到对seata感兴趣的小伙伴。先…

Java代码与数据库纽带——JDBC

ok,看了题目,就可以知道今天要分享的是JDBC 讲这个这之前,想讲讲之前的。 之前我们操作数据库基本都是通过MySQL客户端,进行编写sql语句来操作的。 但是我们在开发中一般都是通过代码来操控数据库的。 而且在我们日常开发中&a…