过拟合和欠拟合
- 本文首发自公众号:RAIS
前言
本系列文章为 《Deep Learning》 读书笔记,可以参看原书一起阅读,效果更佳。
构建复杂的机器学习算法
上一篇文章中我们介绍了什么叫做机器学习算法极其具体的定义和所关心的问题,比较简单,接下来的文章我们将介绍一些设计学习算法的基本准则。
误差
- 泛化:机器学习的目的是在新的输入上具有良好的表现,而不是已有的数据,这很好理解,在新的数据上表现良好的能力叫做 泛化。
在机器学习中,总是存在误差的,百分之百的确定的事件已经不是机器学习研究的范围了。既然如此,就一定存在误差,训练过程在训练集上误差称作 训练误差,泛化后的在新的输入上的误差称为 泛化误差 或 测试误差。我们都希望误差尽可能的小,并且相比较而言泛化误差减小更重要(毕竟解决问题才是最重要的)。
这里会遇到一个问题就是我们往往只能得到训练数据集,没有什么好的办法提前获取模型交付生产环境后所新输入的数据,针对这样的问题,我们往往在收集统计训练数据时,尽量接近实际生产环境,并且假设数据之间是 独立同分布 的,称为 数据生成分布,基于这样的原因,我们会假设训练误差和测试误差两者的期望是一样的。因此我们针对数据集,具体的做法就会是先尽可能的减小 训练误差,让模型在已有的数据上表现良好,然后再尽可能减小 测试误差 与训练误差之间的差距,这样就会得到一个测试误差较低的模型。
欠拟合和过拟合
上面描述的过程中,会遇到两个问题,过拟合和欠拟合。
针对训练集,如果训练出的模型类似于将每一个训练集的数据映射到其结果上,训练误差几乎为 0,但是这样的网络关注了训练集中的每一个数据的每一个细节,甚至极其特殊的细节,本应该被忽略,却由于过度追求训练误差而被放大了,这是不可取的,这样训练出的网络处于过拟合状态,对新的输入,尤其是包含特殊细节的输入,会导致其结果不够准确,会导致过拟合。
另外一种情况是训练出的网络针对训练集中的特征点训练不充分,没有抓住尽可能多的特点,也会导致网络训练的不够,处于欠拟合状态。
容量
网络中模型节点的参数多少,代表着拟合各种函数的能力,称作 容量,节点越多,所关注的网络的特征就越多,过多会导致过拟合,过少会导致欠拟合,因此控制网络的容量就很重要。
一种控制容量的算法是选择 假设空间,具体的实现就是选择解决方案的函数集。比如线性回归算法将关于其输入的所有线性函数作为假设空间,广义线性回归的假设空间包含多项式函数,而不仅仅是线性函数。在实际的情况中,找到最合适的拟合函数容量比较难,往往是找到一个大致的容量。
- 表示容量:我们可以从哪些函数族中选择拟合函数;
- 有效容量:有可能小于表示容量,基本达到最初的目标,只找到了一个效果还不错但并非完全完美的拟合函数。
一些概念
- 奥卡姆剃刀:在同样能够解释已知观测的现象中,应该挑选最简单一个(像不像物理上追求大一统的理论)。
- VC 维:Vapnic-Chervonenkis Dimension,用来度量容量。如二维假设空间,如果平面上有两个点,分成两类,可能有四种情况;三个点有八种情况;四个点有十四种情况,这样整个平面就分为了相应的部分,无穷的假设点分为了有限的部分。
- 非参数模型:参数模型学习的函数在观测到新数据前,参数向量的分量个数是有限且固定的,非参数模型没有这些限制。
最近临近回归
线性回归的做法是训练出固定长度的向量作为权重,最近临近算法则不同,而是存储了所有的训练集中的数据,所需要测量的测试点分别与训练集中的点计算距离,认为距离最近的点就和测试点所在同一个类别中,返回同一个回归目标。
贝叶斯误差
也称 贝叶斯错误率,应用贝叶斯分类规则分类器的错误率,贝叶斯分类规则在最小分类错误率上是最优的,因此在所有分类问题中,贝叶斯误差是一个分类器对某个类别所能达到的最低的分类错误率。
没有免费午餐定理
在所有可能的数据生成分布上平均后,每个分类算法在未事先观测的点上都有相同的错误率;换一句话说,没有任何一种机器学习算法是适用于所有情况的;再换一句话说,在某些问题上算法 A 比算法 B 更好,则一定有另外一些问题,算法 B 比算法 A 更好。这告诉我们不要去试图找到一个大一统的算法理论,而应该根据实际问题去寻找相应的最优的算法。
正则化
这个问题真的是太复杂了,在本书这种级别的书,在后面有一整章来讨论这个问题,非常重,因此很幸运在这里可以简单的先进行简单了解,在后面的文章中详细介绍。
在上面的过拟合的图中,也在本篇文章的第一个图,通过过拟合的曲线,我们可以想一下究竟是什么样的函数能是这样的曲线,一定是这个函数好多项,其中变量的次数非常高,例如这样子的,当然这是随便一个例子,并不一定完全是这个图的图像:
对于这个还算简单的问题,用这么复杂的函数去拟合,有点过于追求拟合程度了,过犹不及,这不好。怎么办呢,假设后面四项的系数 a 接近于 0,是不是可以后面这些项对于整个函数来说贡献的值就微乎其微了,则这个函数退化为二次函数,这是我们认为拟合程度最好的情况,这就是一种正则化的方法。在后续的文章中还会介绍大量正则化的形式。总结 欠拟合和过拟合是常见机器学习中的拟合不好的情况,上面介绍了相关内容。
- 本文首发自公众号:RAIS
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从零开始入门 K8s | Kata Containers 创始人带你入门安全容器技术
作者 | 王旭 蚂蚁金服资深技术专家 本文整理自《CNCF x Alibaba 云原生技术公开课》第 28 讲,点击直达课程页面。 关注“阿里巴巴云原生”公众号,回复关键词**“入门”**,即可下载从零入门 K8s 系列文章 PPT。 一、缘起:安全容器的命名 Phil Karlton 有一句名言:“计算机科学界只有两个真正的难题——缓存失效和命名。” 对我们容器圈而言,我相信「命名」绝对配得上这句话。这毫无疑问是一件让老开发者沉默、让新人落泪的事情。仅就系统软件而言,我们当今比较通行地称为**「Linux 容器技术」**这个概念,它曾经用过的名字还有 Jail, Zone, Virtual Server, Sandbox 等。同样,在早期虚拟化的技术栈里也把一类虚拟机叫做容器,毕竟这个词本身就指代那些用来包容、封装和隔离的器物。它实在太过常见了,以至于以严谨著称的 Wikipedia,它的词条叫做「OS-Level Virtualization」(系统级虚拟化) ,从而回避了「什么是容器」这个问题。 在 2013 年,Docker 问世之后,容器这个概念伴随着不可变基础设施、云原生这...
- 下一篇
数据源管理 | 主从库动态路由,AOP模式读写分离
本文源码:GitHub·点这里 || GitEE·点这里 一、多数据源应用 1、基础描述 在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据,这种读写分离模式可以缓解数据库压力,提高系统的并发能力和稳定性,执行效率。 2、核心API 在处理这种常见问题,要学会查询服务基础框架的API,说直白点就是查询Spring框架的API(工作几年,还没用过Spring之外的框架搭建环境),这种常用的业务模式,基本上Spring都提供了API支持。 核心API:AbstractRoutingDataSource 底层维护Map容器,用来保存数据源集合,提供一个抽象方法,实现自定义的路由策略。 @Nullable private Map<Object, DataSource> resolvedDataSources; @Nullable protected abstract Object determineCurrentLookupKey(); 补刀一句:为何框架的原理很难通过一篇文章看明白?因为使用的不多,基本意识没有形成,熟悉框...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7