机器学习—学习曲线
学习曲线是帮助理解学习算法如何工作的一种方法,作为它所拥有的经验的函数。
绘制一个符合二阶模型的学习曲线,多项式或二次函数,画出交叉验证错误Jcv,以及Jtrain训练错误,所以在这个曲线中,横轴将是Mtrain,即训练集大小或算法可以从中学习的示例数,在垂直轴上,画出误差,所以让我们从绘制交叉验证错误开始,绿线代表Jcv(w,b),当Jtrain训练集规模变大,所以交叉验证错误现在下降了,绘制训练错误的Jtrain(w,b),随着训练集的规模越来越大,原来训练错误实际上会是这样的(蓝线),随着训练集的规模越来越大,训练集误差实际上增大了,为什么会出现这种情况?
将从一个例子开始,当你只有一个训练例子,如果你拟合一个二次模型,你可以很容易的知道直线或曲线,你的训练误差将为0,如果你有两个这样的训练例子,你可以再次拟合一条直线,实现零训练误差,事实上,如果你有三个训练例子,二次函数仍可以很好的拟合这一点,几乎没有训练错误,但是如果你的训练集再大一点,假设你有四个训练例子,然后要完美地适应所有四个例子就变得有点难了,你可能会得到一条曲线,看起来很适合它,所以当你把训练集的大小增加到四个,训练误差实际上上升了一点,我们有五个训练例子怎么样你可以更好的适应它?但是要完全适应它们就更难了,当你有一个更大的训练集,只是越来越难适应每一个你的训练例子,所以总结一下,当你有非常少的训练例子,像一两个甚至三个,相对容易得到零或非常小的训练误差,但是当你有一个更大的训练集,对于二次函数来说更难完美地拟合所有的训练示例,这就是为什么随着训练集变得越来越大,训练误差增加是因为很难拟合所有的训练示例,注意这些曲线的另一个特点,交叉验证误差通常会高于训练误差,因为你将参数拟合到训练集,或者当m小的时候,也许在训练集上比在交叉验证集上要好得多。

现在让我们看看学习曲线是什么样的?
对于高偏差算法和高方差算法,让我们从高偏差或不合身的情况开始,回想一下,高偏差的一个例子是如果你把一个线性函数拟合到一条曲线上,,如果你要绘制训练错误,然后训练误差会像你预期的那样上升,事实上,这条训练误差曲线可能会开始变平,或者称之为高原,意思是过了一段时间就变平了,这是因为当你得到越来越多的训练例子,当你拟合简单的线性函数时,你的模型实际上变化不大,它符合一条直线,即使你得到越来越多的例子,没有太多要改变的了,这就是为什么平均训练误差在那时间后就会变平,同样,交叉验证出错误也会下降,一段时间也会变平,这就是为什么Jcv又比Jtrain高,但Jcv往往看起来像那样,因为超过了某一点,即使你得到越来越多的例子,拟合的直线不会有太大的变化,这只是一个太简单的模型,不适用于这么多数据,所以这两条曲线,Jcv和Jtrain趋于平坦,如果你有一个基准性能水平的衡量标准,例如人的水平表现,然后它将倾向于一个低于Jtrain的值,还有Jcv,所以人类水平的表现可能是这样的。在性能的基线水平和Jtrain之间有很大的差距,我们发现这个算法有很高的偏差。

如果你能有一个更大的训练集,如果把m值增加到比这张图的右边更远的地方,会是什么样子?
想象如果把这两条曲线都向右延伸,它们都变平了,它们两个可能会继续像那样扁平,无论向右边延伸多远,这条曲线永远不会相交,找到一种方法来降低人类的表演水平,或者一直像这样扁平下去,不管训练集有多大,如果一个算法有很高的偏差,获取更多的训练数据本身并没有多大的帮助,我们习惯于认为有更多的数据是好的,但是如果算法有很高的偏差,那么唯一做的就是向它扔更多的训练数据,它本身不会让你降低那么多的错误率,无论在这个图中添加多少示例,直线拟合不会变的更好,这就是为什么再投入大量精力收集更多训练数据之前值得检查学习算法是否有很高的偏差。

现在让我们看看学习曲线是什么样子的?
对于一种高方差的学习算法,如果你拟合一个四阶多项式,对于小的lambda甚至lambda=0,得到一个曲线,如右上图所示,即使它很符合训练数据,它不能概括,在这种高方差的情况下,随着训练集模型的增加,Jtrain将上升,Jcv会更高,所以你的交叉验证错误比你的训练错误高得多,事实上,这里有一个巨大的差距,高方差在训练集上做得更好,比在交叉集上做得要多,如果你要绘制性能的基线水平,例如人的表现水平,Jtrain有时甚至比人类的性能水平还要低,也可能人类水平的表现比这低一点,但是当你过度训练的时候,也许能很好的适应训练集,有一个不切实际的低误差,比如这个例子中的零误差。人类实际上能够预测房价,或者正在处理应用的程序,高方差的信号是Jcv是否远高于Jtrain,当你有很高的方差时,那么增加训练集的大小可能会有很大的帮助,特别是如果我们能把这些曲线外推到合适的增量Mtrain上,训练误差还会继续往上走,但是交叉验证错误有希望下降并接近Jtrain,所以在这种情况下,仅仅通过增加训练集的大小来降低交叉验证错误是可能的,为了让你的算法性能越来越好,这与高偏差情况不同,如果你唯一要做的是得到更多的训练数据,这实际上不会帮助您的学习算法的性能,总而言之,如果学习算法存在高方差,那么获得更多训练的数据确实可能有所帮助。在这个例子中,只需获取更多训练数据,允许算法从这个相对较高的交叉验证错误更接近人类水平的表现。如果你增加更多的训练例子,并继续拟合四阶多项式,就会得到一个更好的四阶多项式拟合这个数据。

因此,如果你正在构建一个机器学习应用程序,你可以画出学习曲线,可以将训练集的不同子集,即使有一千个训练例子,可以用一百个训练例子来训练一个模型,看看训练错误和交叉验证错误,然后再两百个例子上训练一个模型,重复并绘制出学习曲线是什么样子,如果你的学习曲线看起来更像是高偏差或高方差,使用训练集的不同大小的子集。
相关文章:
机器学习—学习曲线
学习曲线是帮助理解学习算法如何工作的一种方法,作为它所拥有的经验的函数。 绘制一个符合二阶模型的学习曲线,多项式或二次函数,画出交叉验证错误Jcv,以及Jtrain训练错误,所以在这个曲线中,横轴将是Mtrai…...
在 macOS 和 Linux 中,波浪号 `~`的区别
文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…...
【Java】实战:多数元素
一、题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出&#x…...
一文解决Latex中的eps报错eps-converted-to.pdf not found: using draft setting.
在使用Vscode配的PDFLatex编译IEEE TII的Latex模板时,出现eps文件不能转换为pdf错误,看了几十篇方法都没用,自己研究了半天终于可以正常运行了。主要原因还是Settings.JSON中的PDFLatex模块缺少:"--shell-escape", 命令…...
计算光纤色散带来的相位移动 matlab
需要注意的地方 1.以下内容纯属个人理解,很有可能不准确,请大家仅做参考 2.光速不要直接用3e8 m/s,需要用精确的2.9979.... 3.光的频率无论在真空还是光纤(介质)都是不变的,是固有属性,但是波长lambdac/f在不同的介…...
国内docker pull拉取镜像的解决方法
访问网站,查找该网站上可用的镜像源,然后替换掉下面代码中的hub-mirror.c.163.com: docker pull hub-mirror.c.163.com/library/nginx:latest 另外,进入到镜像之后,可以使用下面的命令查看操作系统版本。 lsb_releas…...
“Kafka面试攻略:核心问题与高效回答”
1,生产者发送消息的原理 发送消息的过程中,涉及到两个线程,main线程和sender线程,main线程会创建一个双端队列,main线程向双端队列发送消息,sender线程从双端队列里拉取消息,发送给Kafka Broke…...
C++ 多线程std::thread以及条件变量和互斥量的使用
前言 本文章主要介绍C11语法中std::thread的使用,以及条件变量和互斥量的使用。 std::thread介绍 构造函数 std::thread 有4个构造函数 // 默认构造函,构造一个线程对象,在这个线程中不执行任何处理动作 thread() noexcept;// 移动构造函…...
新华三H3CNE网络工程师认证—子接口技术
子接口(subinterface)是通过协议和技术将一个物理接口(interface)虚拟出来的多个逻辑接口。在VLAN虚拟局域网中,通常是一个物理接口对应一个 VLAN。在多个 VLAN 的网络上,无法使用单台路由器的一个物理接口…...
【MySQL】InnoDB内存结构
目录 InnoDB内存结构 主要组成 缓冲池 缓冲池的作用 缓冲池的结构 缓冲池中页与页之间连接方式分析 缓冲池如何组织数据 控制块初始化 页面初始化 缓冲池中页的管理 缓冲区淘汰策略 查看缓冲池信息 总结 变更缓冲区-Chang Buffer 变更缓冲区的作用 主要配置选项…...
基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)
#1024程序员节|征文# 博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…...
蓝桥杯每日真题 - 第19天
题目:(费用报销) 题目描述(13届 C&C B组F题) 解题思路: 1. 问题抽象 本问题可以看作一个限制条件较多的优化问题,核心是如何在金额和时间约束下选择最优方案: 动态规划是理想…...
CentOS7.9.2009的yum更换vault地窖保险库过期源,epel的archive归档源 笔记241117
CentOS7.9.2009的yum更换vault地窖保险库过期源,epel的archive归档源 笔记241117 备份 /etc/yum.repos.d 文件夹 tempUri/etc/yum.repos.d ; sudo cp -a $tempUri $tempUri.$(date %0y%0m%0d%0H%0M%0Sns%0N).bak清空 /etc/yum.repos.d 文件夹 sudo rm -rf /etc…...
Spark SQL大数据分析快速上手-完全分布模式安装
【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 大数据与数据分析_夏天又到了的博客-CSDN博客 Hadoop完全分布式环境搭建步骤-CSDN博客,前置环境安装参看此博文 完全分布模式也叫集群模式。将Spark目…...
Java面试题2024-Java基础
Java基础 1、 Java语言有哪些特点 1、简单易学、有丰富的类库 2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) 3、与平台无关性(JVM是Java跨平台使用的根本) 4、可靠安全 5、支持多线程 2、…...
局域网协同办公软件,2024安全的协同办公软件推荐
在2024年,随着数字化转型的深入和远程工作需求的增加,协同办公软件已成为企业提升工作效率、优化沟通流程的重要工具。 以下是一些值得推荐的安全的协同办公软件: 钉钉 功能全面:钉钉是一款综合性极强的企业级协同软件ÿ…...
osg、osgearth简介及学习环境准备
一、osg简介(三维场景图渲染与调度引擎) OSG是Open Scene Graphic 的缩写,OSG于1997年诞生于以为滑翔机爱好者之手,Don burns 为了对滑翔机的飞行进行模拟,对openGL的库进行了封装,osg的雏形就这样诞生了&…...
nodejs基于微信小程序的云校园的设计与实现
摘 要 相比于传统的校园管理方式,智能化的管理方式可以大幅提高校园的管理效率,实现了云校园管理的标准化、制度化、程序化的管理,有效地防止了云校园信息的不规范管理,提高了信息的处理速度和精确度,能够及时、准确地…...
uni-app快速入门(十)--常用内置组件(下)
本文介绍uni-app的textarea多行文本框组件、web-view组件、image图片组件、switch开关组件、audio音频组件、video视频组件。 一、textarea多行文本框组件 textarea组件在HTML 中相信大家非常熟悉,组件的官方介绍见: textarea | uni-app官网uni-app,un…...
golang基础
在 Go 中字符串是不可变的,例如下面的代码编译时会报错: cannot assign to s[0] 但如果真的想要修改怎么办呢?下面的代码可以实现: var s string "hello" s [ 0 ] c s : "hello" c : [] b…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
