【深度学习】模型评估

news2024/9/25 0:36:33

上一章——多分类问题和多标签分类问题

文章目录

  • 算法诊断
  • 模型评估
  • 交叉验证测试


算法诊断

在这里插入图片描述
如果你为问题拟合了一个假设函数,我们应当如何判断假设函数是否适当拟合了?我们可以通过观察代价函数的图像,当代价函数达到最低点的时候,此时的拟合状态是最好的,因此我们才需要对其进行梯度下降。

上图的代价函数J是经过了正则化的,假设当前代价函数J的拟合误差较大,如何来减小误差?在过拟合与正则化这一章中,列举了几种方法,在上图中也写出了:

  • 增加训练样本
  • 尝试减少特征集
  • 增加一些额外的特征
  • 添加多项式特征
  • 试着改变正则化系数λ

有的时候我们的机器学习算法并不能达到想要的效果,那么也许是哪里出问题了,解决问题并不难,关键在于找到问题出在哪里,因此我们需要对神经网络进行诊断。
诊断是一种测试,我们可以运行它来深入算法,了解算法中那些是有效的,那些是无效的,从而提升算法的性能。因此学习算法诊断是必要的,不过在此之前,我们看看应当如何评估我们的算法。


模型评估

在这里插入图片描述
如图是一个四阶多项式的拟合函数,通过观察图像我们知道这个函数的拟合效果很好,但是好到过头了,我们也说过这种过度拟合的状态称为过拟合。如果增加新的数据,这个拟合函数显然是不具有泛化性的,我们认为这样的过拟合的函数不能推广到新的数据集中的数据。并且我们给出了四个特征,而上图中用于函数拟合的只使用了size这一特征,显然只用一个特征拟合也是不适当的。然而哪怕我们想要使用四个特征绘制函数,身为三微生物的我们也无法画出四维图像。

因此上述模型存在两个问题:

  • 如何保证拟合其他数据?
  • 对于三个以上的特征,我们无法通过图像判断性能,能否更系统地判断模型的性能?

在这里插入图片描述我们的方法是:将数据集划分为两个子集,其中一个称为训练集(training set),我们取70%,另一个称为测试集,取30%。
我们用 ( x , y ) (x,y) (x,y)来表示测试样例,其中 ( x m , y m ) (x^m,y^m) (xm,ym)代表训练集第m项测试样例, ( x t e s t m , y t e s t m ) (x^m_{test},y^m_{test}) (xtestm,ytestm)来表示测试集第m项测试样例。

在这里插入图片描述

接下来,我们可以通过式子①最小化代价函数来找到拟合参数 w , b w,b w,b,因为假设函数是包括了多个特征的多项式,因此我们会采取正则化来减小拟合误差。

式子②称为测试误差,通过式子①我们找到了拟合参数 w , b w,b w,b,现在将其带入到假设函数,并用式子②算出测试集的测试误差,我们并不是在拟合函数,而是计算测试误差的大小,因此该式子是不用正则化的,最后计算的结果即为测试误差。

式子③与式子②同理。注意,式子① J ( w , b ) J(w,b) J(w,b)是代价函数,而式子②③中的 J t e s t ( w , b ) J_{test}(w,b) Jtest(w,b) J t r a i n ( w , b ) J_{train}(w,b) Jtrain(w,b),是计算误差的函数,从本质上来讲误差函数(损失函数)和代价函数是一个东西,但是它们的功能并不相同,理解概念并注意区分。


现在让我们看看拟合图像,如果数据点如上图所示(红点代表训练集数据,绿点代表测试集数据),我们会发现一个问题:

J t r a i n ( w , b ) J_{train}(w,b) Jtrain(w,b)较低,代表了训练误差低,这是必然的,因为我们是基于训练集的数据来最小化代价函数进行参数选择的,因此拟合出来的函数的训练误差一定是较小的。(与训练集的误差在于正则化)

然而如果测试集的数据点如图所示,就会发现 J t r a i n ( w , b ) J_{train}(w,b) Jtrain(w,b)较高,这代表着测试误差较大,这意味着对于测试集,这个拟合函数的拟合状态并不是很好,因此我们可以认为这个函数并不具有泛化性,这个模型是有问题的。


在这里插入图片描述
那么分类问题也是同样的道理,把我们使用分类问题的代价函数(损失函数)来进行计算,

不过在分类问题中,我们对于误差的定义有点不同
在这里插入图片描述
在二分问题里,通常我们将0.5作为阈值,当>阈值分类为1,<阈值分类为0,我们将代价函数的预测值称为 y ^ \hat y y^,分类问题中的误差,指的是对于同一个输入样例,有多少个预测值 y ^ \hat y y^与实际值 y y y不同,这个误差指的是这些被错误分类的 y ^ \hat y y^的数量比例。

通过训练集和测试集,你可以系统地对模型误差进行评估,从而创建更好的模型。


交叉验证测试

在这里插入图片描述
那么假如,我们按照刚才的模型评估的步骤来建立一个拟合函数,我们首先通过训练集的数据的正则化最小化代价函数,找到了合适的 w 和 b w和b wb,我们将当前的拟合出来的多次项的项数记为 d = n d=n d=n,把对应项数的参数记为 w < n > , b < n > w^{<n>},b^{<n>} w<n>,b<n>,最后计算的测试误差记为 J t e s t ( w < n > , b < n > ) J_{test}(w^{<n>},b^{<n>}) Jtest(w<n>,b<n>),现在我们要做的就是找到最小的测试误差 J t e s t J_{test} Jtest所对应的 w , b 和 d w,b和d w,bd,现在假设找到了最小测试误差是在当 d = 5 d=5 d=5时,我们是否可以认为现在选择的模型是最适宜的?

实际上,答案是否定的,因为我们的估计流程依然存在着问题,导致了 J t e s t J_{test} Jtest很可能乐观估计了泛化误差,也就是说虽然我们计算出来的测试误差与实际的泛化误差相比可能偏小了,实际误差将会比计算结果要大。原因在于多项式的次数d,因为d是在测试集上确定的,用测试集确定的d来检验测试集的误差,那必然能得到一个较小的误差,就像我给我自己监考,这显然是不公平的。

在这里插入图片描述

我们解决问题的方法是:将数据集分为三个子集,训练集60%,交叉验证集20%,测试集20%。其中新加入的交叉验证集(cross validation set)的作用是用于检查不同验证集合的准确性,你也可以叫他验证集(validation set)或者开发集(development set 或dev set)。

在这里插入图片描述 w , b w,b w,b还是用最小化代价函数计算,现在我们要计算的误差总共有三个,它们的公式是一样的,交叉验证集的误差被称为验证误差或者开发误差。
在这里插入图片描述

现在再让我们回到之前的步骤,我们首先通过训练集的数据的正则化最小化代价函数计算不同次数的 w , b w,b wb,我们带入验证误差来计算对应次数的 J c v J_{cv} Jcv,假设现在我们找到了 d = 4 d=4 d=4时的验证误差最小,那么我们就可以用 d , w < 4 > , b < 4 > d,w^{<4>},b^{<4>} d,w<4>,b<4>去计算测试误差 J t e s t J_{test} Jtest,因为 w , b w,b w,b是训练集确定的, d d d是交叉验证集确定的,因此没有一个参数与测试集有关,这样就保证我们的误差计算结果相对公平。

在这里插入图片描述在整个神经网络模型的选择上我们也是这样测试的,例如这三个模型的隐藏层,我们计算得到二号模型的参数对应的验证误差较小,那么我们就可以使用第二个神经网络训练的参数,如果想要得到泛化误差的估计值,我们就可以用这个参数带入计算测试误差 J t e s t J_{test} Jtest来判断神经网络的性能,使用交叉验证集来选择模型也是目前最佳的决定方法。不过想要作出决定只需要训练集和交叉验证集来确定参数即可,在确定参数之后我们可以在测试集进行评估。这种方法可以确保测试集的公平估计,而非对泛化误差的乐观估计。一个重要原则就是:在未决定模型之前,千万不要使用测试集的数据,来保证估计的公平性。

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

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

相关文章

手机/移动端的UI框架-Vant和NutUI

下面推荐2款手机/移动端的UI框架。 其实还有很多的框架&#xff0c;各个大厂都有UI框架。目前&#xff0c;找来找去&#xff0c;只有腾讯的移动端是setup语法写的TDesign&#xff0c;其他大厂&#xff0c;虽然都是VUE3写的&#xff0c;但是都还未改成setup的语法&#xff0c;而…

张晨光-JAVA零基础保姆式JDBC技术教程

JDBC文档 JDBC概述 JDBC概述 Java DataBase Connectivity Java 数据库连接技术 JDBC的作用 通过Java语言操作数据库&#xff0c;操作表中的数据 SUN公司为**了简化、**统一对数据库的操作&#xff0c;定义了一套Java操作数据库的规范&#xff0c;称之为JDBC JDBC的本质 是官方…

【JavaSE专栏10】Java的顺序结构、选择结构和循环结构

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

金融错配程度/信贷错配程度/资本错配程度/资本资源错配程度(1998-2021年)

数据来源&#xff1a;根据沪深A股上市公司数据进行测算 时间跨度&#xff1a;1998-2021年 区域范围&#xff1a;沪深A股上市公司 指标说明&#xff1a; 参考邵挺(2010)、周煜皓和张胜勇(2014)的研究&#xff0c;运用金融错配负担水平来衡量信贷错配&#xff08;Fd&#xff…

Redis-哨兵模式以及集群

在开始这部分内容之前需要先说一下复制功能&#xff0c;因为这是Redis实现主从数据同步的实现方式。复制功能如果存在两台服务器的话&#xff0c;我们可以使用redis的复制功能&#xff0c;让一台服务器去同步另一台服务器的数据。现在我启动了两台redis服务器&#xff0c;一个端…

【大数据】HADOOP-Yarn集群界面UI指标项详解(建议收藏哦)

目录首页&#xff08;Cluster&#xff09;节点信息Scheduler Metrics&#xff1a;集群调度信息节点信息详解&#xff08;Nodes&#xff09;应用列表信息&#xff08;applications&#xff09;队列详情页&#xff08;Scheduler&#xff09;指标详细说明&#xff08;非常重要&…

斯坦福:chatGPT可能有了人类心智,相当于9岁儿童!

chatGPT已经具备了人类独心智&#xff0c;这话不是我说的&#xff0c;是一位来自斯坦福大学计算机科学家说的。很多玩过chatGPT的人都见识过他的”无所不知”&#xff0c;但是&#xff0c;我觉得最让我吃惊的是&#xff0c;他比以前我们用过那些对话机器人最大的差别就是你甚至…

「数据科学」数据科学家为什么应该学习PostgreSQL?

SQL是成为数据科学家的必要条件吗?答案是肯定的。数据科学已经发展了&#xff0c;虽然许多数据科学家仍然使用CSV文件(值以逗号分隔的文本文件)&#xff0c;但它们不是最好的选择。Python Panda库允许从CSV文件加载数据&#xff0c;但是这些文件有许多约束。例如&#xff0c;它…

各种常用C/C++集成开发环境的安装与配置

新学期又开始了&#xff0c;帮助又一堆菜鸟安装和配置C/C集成开发环境是一件恼人的工作。 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许以纸质及电子出版为目的…

【k8s】如何搭建搭建k8s服务器集群(Kubernetes)

搭建k8s服务器集群 服务器搭建环境随手记 文章目录搭建k8s服务器集群前言&#xff1a;一、前期准备&#xff08;所有节点&#xff09;1.1所有节点&#xff0c;关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换&#xff0c;打通所有服务器网络&#xff0c;进行p…

Bash Shell 通过ls命令筛选文件

Bash Shell 通过ls命令及其管道根据大小名称筛选文件 最近参与的项目当中有需要用pyarmor加密项目的要求&#xff0c;听网上吹的pyarmor都那么神&#xff0c;用了一下感觉也一般&#xff0c;试用版普通模式下文件加密居然还有大小32KB的限制&#xff0c;加密到一半就失败了&am…

Linux常用命令汇总

1、tcpdump抓包 tcpdump这个命令是用来抓包的&#xff0c;默认情况下这个命令是没有的&#xff0c;需要安装一下&#xff1a; yum install -y tcpdump 使用这个命令的时候最好是加上你网卡的名称&#xff0c;不然可能使用不了&#xff1a; tcpdump -nn -i {网卡名称} 网卡名称…

iOS开发笔记之九十六——本地Data Persistence总结笔记

本质上来说&#xff0c;不管是哪种缓存方式最终都会以文件的形式存储在磁盘上&#xff0c;只不过上层进行了某种“封装”或“抽象”&#xff0c;所以还是做了分类&#xff0c;目前iOS本地持久化缓存&#xff08;Storage/Persistence&#xff09;有以下几种形式&#xff1a;User…

vTESTstudio - VT System CAPL Functions - VT2004(续1)

成熟,就是某一个突如其来的时刻,把你的骄傲狠狠的踩到地上,任其开成花或者烂成泥。vtsStartStimulation - 启动激励输出功能&#xff1a;自动激励输出注意&#xff1a;在启动激励输出之前&#xff0c;一定要设置好输出模式Target&#xff1a;目标通道变量空间名称&#xff0c;例…

TLB内存页表 - LoongArch

TLB内存页表 - LoongArch 文章目录TLB内存页表 - LoongArch页表操作指令TLB相关寄存器页表格式CpuSetAttributesUEFI Memory attribute页表操作指令 LDDIR: 用于软件页表遍历过程中目录项的访问. LDPTE: 用于在软件页表遍历过程中页表项的访问. INVTLB: 用于无效TLB中的内容. …

Mybatis源码分析:Mybatis的数据存储对象

前言&#xff1a;SQLSession是对JDBC的封装 一&#xff1a;SQLSession和JDBC的对照说明 左边是我们的客户端程序&#xff0c;右边是我们的MySQL数据仓&#xff0c;或者叫MySQL实例 Mybatis是对JDBC的封装&#xff0c;将JDBC封装成了一个核心的SQLSession对象 JDBC当中的核心对…

2023年浙江理工大学MBA招生考试初试成绩查询及复查的通知

根据往年的情况&#xff0c;2023浙江理工大学MBA考试初试成绩可能将于2月21日下午两点公布&#xff0c;为了广大考生可以及时查询到自己的分数&#xff0c;杭州达立易考教育为大家汇总了信息。 一、成绩查询考生可登录中国研究生招生信息网“全国硕士研究生招生考试初试成绩查询…

二十四节气—雨水,好雨知时节,当春乃发生。

雨水&#xff0c;是二十四节气之第2个节气。 雨水节气不仅表明降雨的开始及雨量增多&#xff0c;而且表示气温的升高&#xff0c;意味着进入气象意义的春天。 雨水节是一个非常富有想象力和人情味的节气&#xff0c;在这一天&#xff0c;不管下不下雨都充满着一种雨意蒙蒙的诗…

nps内网穿透工具

一、准备一台有公网ip的服务器 https://github.com/ehang-io/nps/releases 在这个地址下载服务端的安装包&#xff0c;centos的下载这个 上传到服务器上。 二、然后解压&#xff0c;安装&#xff0c;启动 [rootadministrator ~]# tar xzvf linux_amd64_server.tar.gz [roo…

【C语言】预编译

&#x1f6a9;write in front&#x1f6a9; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5…