模型分析与偏差和方差

在创建一个机器学习系统,当我们的模型出现问题时,我们需要去找到最优的方式,能解决我们的问题,这时我们就需要会去诊断问题。

模型评估(Evaluating a model):

1.训练集和测试集判断:

我们一般把数据组的前70%,使用为我们的训练集,而我们的数据组的最后30%,一般被我们认为 是测试集。

我们可以看到得到的一个根据训练集画出的函数模型,对于训练集来说,误差会非常小,甚至等于0,而我们的测试集,则是我们并没有把我们的数据输入,所以它的误差会非常的大。这里用的是成本函数。

这时一个很好的方法,可以让我们判断我们的算法是否合适。

2.训练交叉验证测试集:

我们把我们的数据分为三个部分,训练集,交叉验证集(dev set),测试集三个部分。  

在我们的交叉验证集,去先测试我们的训练集训练得到的模型,这时我们的测试集也是我们之前没有使用的数据,我们更具交叉验证集验证得到的模型也会在测试集中测试也会非常的合适。

偏差与方差:

 以上这个图给我们介绍了三种情况,在次数不同时,对与训练集和我们的交叉验证集不同的偏差,很明显只有我们的d=2时,才可以完全的适应这个预测的函数,无论是Jtrain还是Jcv.

所以我们在上图中可以发现,当我们的多项式的次数增加时,我们的训练成本函数会不断的下降,而我们的交叉验证成本函数并不是这样的一个趋势,它会在我们从最小的次数到最大的次数中的一个次数,达到它的最小值。  

这是我们的算法需要注意的一个点,通过它我们可以知道是,偏差过大,还是方差过大。 

正则化:

 我们对于\lambda的取值,影响着我们对于拟合函数的影响,上图介绍了我们两个比较极端的情况,很大与很小。

这样我们就可以去根据尝试不同的\lambda的值,去得到我们最合适的权重,使得我们的Jcv最小。

这是\lambda与我们Jtrain和Jcv的关系,我们可以看到当我们的\lambda过大时,我们的Jtrain会很大,而我们的Jcv也会很大,这部分被我们叫做偏差过大,而在\lambda过小时,我们的Jtrain会偏小,而我们的Jcv还是偏大,这部分叫方差过大,也就是过拟合的情况。和之前的次数一样,我们需要找到一个中间值,才能找到一个合适的\lambda

基准值:

我们可以通过我们的基准值来判断我们的Jtrain和Jcv的大小,第一列中,训练误差远小于我们的交叉验证误差,所以第一个是过拟合(high variance),而第二个是我们的训练误差远大于我们的交叉验证误差,所以它是高偏差(high bias)。 

基准值是我们想要达到一个目标,它在不同的情况下,它的取值也并不一样。如果是0%,那你的要求就是完美,一般对于语音识别来说,会有10%的误差存在。

甚至会有两个误差都很大的情况出现。

学习曲线(learning curve):

 

第一个特点,在我们的交叉验证误差,会随着我们的训练项的变大而减小,但是我们会发现我们的训练误差会变大,因为我们的曲线需要去拟合更多的数据,这就会导致我们的训练误差变大。可以看我们的右边的图片。 但我们的交叉验证误差还是大于我们的训练误差。

第二个特点,随着训练集的数量上升,我们的Jcv和Jtrain会趋于平行,因为训练集越到后面,他们所处的位置与之前的都差不到,导致我们的平均误差也没有发生变化。

那当我们是高方差的情况下(过拟合):

随着我们的训练集的增加,我们会看到我们的Jcv大于我们的人类的水平,而我们的Jtrian会出乎意料的低于我们的人类水平,因为他们是过拟合的,并且他们与交叉验证误差的差值也很大,但是随着我们的训练集的不断增大,我们的两个误差也会不断的向人类的水平靠近。我们可以看一下我们右边的两个图,上面那个图是我们的过拟合的图,而下面的则是我们根据数量的增加,不断接近的一个合适的函数,而不是过拟合的函数。

这个方法的唯一缺点就是我们需要使用大量的数据,计算是非常昂贵的。

我们可以来对应一下解决高方差和高偏差的方法:

 可以好好想想为什么是这样。

下图是我们如何做到,我们的神经网络足够的适合,我们完成一个神经网络,我们会对我们的训练误差先进行分析,如果接近或等于0,我们就进行到交叉验证分析。如果训练误差较大,那我们就应该去给我们的神经网络增加更多的特征,也就是创建更大的神经网络,再进行我们的训练误差的检验。当我们来到计算交叉验证误差处,偏大则是我们需要更多的数据,并重新会到训练误差处,重新开始以上的操作,而当我们的交叉验证误差也很小时,这一个神经网络就是一个比较好的神经网络了。

当然我们要对我们的神经网络正则化,也需要在每个神经网络层上加入正则化。

from tensorflow.keras.regularizers import L2
model = Sequential([ Dense(units=900, activation="relu", kernel_regularizer=L2(0.01)),Dense(units=500, activation="relu", kernel_regularizer=L2(0.01)),Dense(units=1, activation="linear", kernel_regularizer=L2(0.01))
])

这里的0.01指的是我们正则化的\lambda值。

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

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

相关文章

凌鲨微应用架构

微应用是静态网页加上凌鲨提供的扩展能力而形成的一种应用,主要特点是开发便捷,安全。 微应用架构 组件说明 名称 说明 微应用 webview窗口,显示web服务器上的页面 接口过滤器 根据权限配置,屏蔽非授权接口访问 接口提供者 tauri注入…

多线程多进程处理服务器并发(多进程处理如何解决僵死进程)

目录 1.可循环发送数据的代码 2.改成循环之后每次发现只能处理一个客户端 3.服务器端处理并发问题 3.1 思路 3.2 利用多线程实现并发 ​编辑 3.3 利用多进程实现并发 3.3.1 多进程并发产生的僵死进程问题 ​3.3.2 解决僵死进程问题 1.可循环发送数据的代码 服务器代…

YoLo进化史《A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 TOYOLOV8 AND BEYOND》

Abstract YOLO已成为机器人、无人驾驶汽车和视频监控应用的核心实时目标检测系统。我们对YOLO的发展进行了全面的分析,研究了从最初的YOLO到YOLOv8的每次迭代中的创新和贡献。我们首先描述标准指标和后处理;然后,我们讨论了网络架构的主要变化和每个模型…

Java宝典-抽象类和接口

目录 1. 抽象类1.1 抽象类的概念1.2 抽象类的语法1.3 抽象类的特点 2. 接口2.1 接口的概念2.2 接口的语法2.3 接口的特点2.4 实现多个接口2.5 接口的继承 3. 接口使用案例 铁汁们好,今天我们学习抽象类和接口~ 1. 抽象类 1.1 抽象类的概念 什么是抽象类?在面向对象中,如果一…

C++的一些基础语法

前言: 本篇将结束c的一些基础的语法,方便在以后的博客中出现,后续的一些语法将在涉及到其它的内容需要用到的时候具体展开介绍;其次,我们需要知道c是建立在c的基础上的,所以c的大部分语法都能用在c上。 1.…

继承杂谈。

内容一览 前言继承的概念及定义继承的意义继承关系及访问限定符父类和子类对象之间的转化继承后的作用域继承与有元继承与静态成员多继承继承和组合的区别:继承的总结和反思 前言 面向对象的三大特性:封装继承和多态,这三种特性优者很紧密地联…

Flink实时数仓同步:实时表实战详解

一、背景 在大数据领域,初始阶段业务数据通常被存储于关系型数据库,如MySQL。然而,为满足日常分析和报表等需求,大数据平台采用多种同步方式,以适应这些业务数据的不同存储需求。这些同步存储方式包括离线仓库和实时仓…

VUE3 使用axios网络请求

1.新建工程 参考,VUE3 环境搭建:https://blog.csdn.net/LQ_001/article/details/136293795,运行命令 vue create vue-demo 2.引入axios 不管何种引用,都要在工程中安装 axios 包。安装命令:npm install --save axio…

python的scripts文件夹作用

Windows系统: Scripts文件夹通常位于Python的安装目录下,如C:\Python\Scripts。该文件夹内包含了各种有用的工具,例如pip、virtualenv等,这些工具有助于管理和配置Python环境和依赖包。 Linux系统: 在Linux系统中&…

flink重温笔记(十四): flink 高级特性和新特性(3)——数据类型及 Avro 序列化

Flink学习笔记 前言:今天是学习 flink 的第 14 天啦!学习了 flink 高级特性和新特性之数据类型及 avro 序列化,主要是解决大数据领域数据规范化写入和规范化读取的问题,avro 数据结构可以节约存储空间,本文中结合企业真…

[BJDCTF2020]----EzPHP

文章目录 pass-1pass-2pass-3pass-4pass-5pass-6pass-7 查看题目&#xff0c;右键源代码&#xff0c;发现GFXEIM3YFZYGQ4A&#xff0c;base64解码&#xff1a;1nD3x.php 访问1nD3x.php&#xff0c;代码审计&#xff0c;一步一步分析 <?php highlight_file(__FILE__); error…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…