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

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

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

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

但如果换做是验证集的假设函数,图像又有所不同。可以看到在 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.mzph.cn/pingmian/59737.shtml

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

相关文章

大牛直播SDK如何实现Android平台多路RTSP播放?

技术背景 好多开发者,希望能在Android平台实现多路RTSP播放,从而达到集中监控的目的,以下是使用大牛直播 SDK 在 Android 平台上实现 RTSP 多路播放的一般步骤: 初始化 SDK 在项目的build.gradle文件中添加大牛直播 SDK 的依赖。…

linux 通过apt安装软件包时出现依赖包版本不对的问题解决

通过网上查找解决办法时,发现的解决办法无法完美解决问题: 比如通过安装对应版本解决 如: sudo apt-get install xxx2.7.0ubuntu 这样会先卸载原先包,在安装对应版本的包 或者直接删除依赖的包 sudo apt-get purge xxxx 如果碰到底层包的话&#xf…

浮点数和字节数据的在线转换工具

具体请参考:浮点数在线转四字节字节序工具--在线将float浮点数转化为类似内存中的4字节字节序,支持2进制,10进制,16进制

GitLab基于Drone搭建持续集成(CI/CD)

本文介绍了如何为 Gitee 安装 Drone 服务器。服务器打包为在 DockerHub 上分发的最小 Docker 映像。 1. 准备工作 创建OAuth应用 创建 GitLab OAuth 应用。Consumer Key 和 Consumer Secret 用于授权访问极狐GitLab 资源。 ps:授权回调 URL 必须与以下格式和路径匹配&…

2024网鼎杯web1+re2 wp

这两道题属于比较简单的,顺道说一下,今年的题有点抽象,web不是misc,re不是web的,也有可能时代在进步,现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了,进来疯狂找sql注入&#xff0c…

「C/C++」C/C++关键字 之 const常量

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

复现LLM:带你从零认识语言模型

前言 本文会以Qwen2-0.5B模型为例,从使用者的角度,从零开始一步一步的探索语言模型的推理过程。主要内容如下: 从使用的角度来接触模型本地运行的方式来认识模型以文本生成过程来理解模型以内部窥探的方式来解剖模型 1. 模型前台使用 1.1…

【NLP自然语言处理】深入探索Self-Attention:自注意力机制详解

目录 🍔 Self-attention的特点 🍔 Self-attention中的归一化概述 🍔 softmax的梯度变化 3.1 softmax函数的输入分布是如何影响输出的 3.2 softmax函数在反向传播的过程中是如何梯度求导的 3.3 softmax函数出现梯度消失现象的原因 &…

Matlab 火焰识别技术

课题介绍 森林承担着为人类提供氧气以及回收二氧化碳等废弃气体的作用,森林保护显得尤其重要。但是每年由于火灾引起的事故不计其数,造成重大的损失。如果有一款监测软件,从硬件处获得的图像中监测是否有火焰,从而报警&#xff0…

Linux多线程(个人笔记)

Linux多线程 1.Linux线程概念1.1线程的优点1.2线程的缺点 2.Linux线程VS进程3.Linux线程控制3.1创建线程3.2线程tid及进程地址空间布局3.3线程终止3.4线程等待 4.分离线程5.线程互斥5.1互斥锁mutex5.2互斥锁接口5.3互斥锁实现原理5.4可重入VS线程安全 6.线程同步6.1条件变量6.2…

【EdgeBox-8120AI-TX2】Ubuntu18.04 + ROS_ Melodic + HP60C上手体验

简介:介绍安思疆 HP60C 深度相机在8120AI-TX2控制器上,TX2核心模块环境(Ubuntu18.04)下测试ROS驱动,打开摄像头图像和查看深度图和点云图,本文的前提条件是你的TX2里已经安装了ROS版本:Melodic。…

DataWind将字符串数组拆出多行的方法

摘要: 可视化建模中先将字符串split为array再用explode(array)即可 可视化建模 进入“可视化建模”页面 1.1 新建任务 如果团队内没有可视化建模任务。请点击“新建任务”,输入名称并确定。 1.2 建立数据连接 在左边栏中选择“数据连接”&#xff0c…

【大数据学习 | kafka】简述kafka的消费者consumer

1. 消费者的结构 能够在kafka中拉取数据进行消费的组件或者程序都叫做消费者。 这里面要涉及到一个动作叫做拉取。 首先我们要知道kafka这个消息队列主要的功能就是起到缓冲的作用,比如flume采集数据然后交给spark或者flink进行计算分析,但是flume采用的…

CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳

2024年11月9日至10日,以“湾区聚力 开源启智”为主题的2024年中国计算机学会中国开源大会(CCF ChinaOSC)将在深圳召开。大会将汇聚国内外学术界、顶尖科技企业、科研机构及开源社区的精英力量,共同探索人工智能技术和人类智慧的无…

人工智能——小白学习指南

知孤云出岫 目录 1. **智能评测系统**2. **个性化学习路径推荐**3. **虚拟学习助手**4. **学习行为分析**5. **数据驱动的教学决策**6. **自动化课程推荐**7. **数据隐私与安全保护** 人工智能知识点的总结和学习路线,以数据表格形式呈现,并附带在教育行…

现代Web开发:React Hooks深入解析

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 现代Web开发:React Hooks深入解析 现代Web开发:React Hooks深入解析 现代Web开发:React Hook…

RTC精度及校准

RTC精度偏差: RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。 一、硬件方面: 1.使用高精度振荡器的RTC模块; …

了解bootstrap改造asp.net core MVC的样式模板

我们都知道,在使用默认的asp.net core MVC模板建立项目的时候,里面的样式是已经事先被写好了的。一般来说都在css目录下的site.css和bootstrap.css及下面的bootstrap.min.css中。我们打开bootstrap这些样式文件,里面有大量的样式类的定义&…

流类库与输入输出

来源:《C语言程序设计》 像C语言一样,C语言也没有输入输出语句。 但C标准库中有一个面向对象的输入输出软件包,即I/O流类库。 流是I/O流类的中心概念。 ------ I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。 -…

cocos creator 3.8.3物理组件分组的坑

坑,坑的不行的大坑 group用的二进制的左移获取十进制的数值 目前是这样判断的,也不知道对不对,什么get、set Group没找到