白话机器学习的数学-3-评估

news2024/11/20 8:43:44

1、 模型评估

那我们如何测量预测函数 fθ(x)的正确性,也就是精度呢?
观察函数的图形,看它能否很好地拟合训练数据:
这是只有一个变量的简单问题,所以才能在图上展 示出来。
过像多重回归这样的问题,变量增加后就不能在图上展示了。
所以我们需要能够定量地表示机器学习模型的精度。

2、 交叉验证

回归问题的验证
把获取的全部训练数据分成两份:一份用于测试,一份用于训练,然后用前者来评估模型。
如果变量增加,就不能画图了,就算能画图,也会很麻烦。
对于回归的情况,只要在训练好的模型上计算测试数据的误差的平方,再取其平均值就可以了。假设测试数据有 n 个,那么可以 这样计算:
这个值被称为均方误差或者 MSE,全称 Mean Square Error。
这个误差越小,精度就越高,模型也就越好。
分类问题的验证
由于回归是连续值,所以可以从误差入手, 但是在分类中我们必须要考虑分类的类别是否正确。
我们是根据图像为横向的概率来分类的, 关于分类是否成功就会有下面 4 种情况:
设横向的情况为正、非横向的情况为负,那么一般来 说,二分类的结果可以用这张表来表示:

分类结果为正的情况是 Positive、为负的情况是 Negative。分类 成功为 True、分类失败为 False。
我们可以使用表里的 4 个记号来计算分类的精度。精 度的英文是 Accuracy,它的计算表达式是这样的:
它表示的是在整个数据集中,被正确分类的数据 TP 和 TN 所占 的比例。
假如 100 个数据中 80 个被正确地分类了,那么精度就是这样:
精确率和召回率
一般来说,只要计算出这个 Accuracy 值,基本上就可以掌握分类 结果整体的精度了。
但是有时候只看这个结果会有问题,所以还 有别的指标。
假设图中的圆点是 Positive 数据、叉号是 Negative 数据,我们来考虑一下数据量极其不平衡的情况:
假设有 100 个数据,其中 95 个是 Negative。那么,哪怕出现模型把数据全部分类为 Negative 的极端情况,Accuracy 值也为 0.95, 也就是说模型的精度是 95%。
但是不管精度多高,一个把所有数据都分类为 Negative 的模型, 不能说它是好模型。
假设分类如下:
首先我们来看第一个指标—— 精确率。它的英文是 Precision:
这个指标只关注 TP 和 FP。根据表达式来看,它的含义是在被分类为 Positive 的数据中,实际就是 Positive 的数据所占的比例:
(这个值越高,说明分类错误越少。)
还有一个指标是 召回率,英文是 Recall:
这个指标只关注 TP 和 FN。根据表达式来看,它的含义是在 Positive 数据中,实际被分类为 Positive 的数据所占的比例:
这个值越高,说明被正确分类的数据越多。
基于这两个指标来考虑精度是比较好的,不过一般来说,精确率和召回率会一个高一个低,需要我们取舍,有些麻烦。
F 值
假设现在有两个模型, 它们的精确率和召回率是这样的:
如果将所有的数据都分类为 Positive,那么召回率就是 1.0。但是 这样一来,Negative 数据也会被分类为 Positive,所以精确率会变得很低。
看一下两个模型的平均值,会发现模型 B 的更高。但它是把所有 数据都分类为 Positive 的模型,精确率极低,仅为 0.02,并不能说它是好模型。
所以就出现了评定综合性能的指标 F 值。表达式中的 Fmeasure 就是 F 值,Precision 是前面说的精确率,Recall 是召回率:
精确率和召回率只要有一个低,就会拉低 F 值。计算一下前面两个模型的 F 值就知道了:
这说明该指标考虑到了精确率和召回率的平衡。其实,也有很多人把前面那个 F 值的表达式变形,写成下面这样,二者是相同的:
有时称 F 值为 F1 值会更准确,这一点需要注意。
F 和 F1 有的时候含义相同,有的时候却并不相同。
除 F1 值之外,还有一 个带权重的 F 值指标:
我们可以认为 F 值指的是带权重的 F 值,当权重为 1 时才 是刚才介绍的 F1 值。
F1 值在数学上是精确率和召回率的调和平均值。关于调和平均值,不需要太深入地了解。
之前介绍的精确率和召回率都是以 TP 为主进行计 算的,那么也能以 TN 为主:
以哪个为主都可以吗?
当数据不平衡时,使用数量少的那个会更好。最开始的例子中 Positive 极少,所以我们使用了 Positive 来计算,反之如果 Negative 较少,那就使用 Negative。
对于回归和分类,我们都可以这样来评估模型。
把全部训练数据分为测试数据和训练数据的做法称为交叉验证,这是非常重要的方法。
交叉验证的方法中,尤为有名的是 K 折交叉验证,掌握这种方法很有好处:
● 把全部训练数据分为 K 份
● 将 K − 1 份数据用作训练数据,剩下的 1 份用作测试数据
● 每次更换训练数据和测试数据,重复进行 K 次交叉验证 
● 最后计算 K 个精度的平均值,把它作为最终的精度 
假如我们要进行 4 折交叉验证,那么就会这样测量精度:
如果全部训练数据的量较大,这种方法必须训练多次,会比较花时间。
不切实际地增加 K 值会非常耗费时间,所以我们必须要确定一个合适的 K 值。

3、正则化

过拟合
之前我们提到过的模型只能拟合训练数据的状态被称为过拟合, 英文是 overfitting。
如: 过度增加函数 fθ(x)的次数会导致过拟合。
有几种方法可以避免过拟合:
● 增加全部训练数据的数量 
● 使用简单的模型 
● 正则化 
首先,重要的是增加全部训练数据的数量。机器 学习是从数据中学习的,所以数据最重要。
另外, 使用更简单的模型也有助于防止过拟合
正则化的方法
在讲解回归的时候提到的目标函数:
我们要向这个目标函数增加下面这样的正则化项:
得到新的目标函数:
我们要对这个新的目标函数进行最小化,这种方法就称为 正则化。
不过一般来说不对 θ0 应用正则化,所以仔细看会发现 j 的 取值是从 1 开始的。
这也就是说,假如预测函数的表达式为 fθ(x) = θ0 + θ1x + θ2x^2 , 那么 m = 2 就意味着正则化的对象参数为 θ1 和 θ2。
θ0 这种只有参数的项称为偏置项,一般不对它进行正则化。
λ 是决定正则化项影响程度的正的常数,这个值需要我们自己来定。
正则化的效果
首先把目标函数分成两个部分:
所以我们实际地 把这两个函数的图形画出来,加起来看看。
把这两个函数的图形画出来,加起来看看。
不过参数太多就画不出图来了,所以这里我们只关注 θ1。而且为了更加易懂,先不考 虑 λ。
不用太在意形状是否精确, 假设它的形状是这样的:
C(θ) :θ1 = 4.5 附近是最小值。
E(θ) = C(θ) + R(θ):  θ1 = 0.9 附近是最小值。
与加正则化项之前相比,θ1 更接近 0 了。
这就是正则化的效果。它可以防止参数变得过大,有助于参数接近较小的值。
虽然我们只考虑了 θ1,但其他 θj 参数的情况也是类似的。
参数的值变小,意味着该参数的影响也会相应地变小。比如,有这样的一个预测函数 fθ(x):
再极端一点,假设 θ2 = 0,这个表达式就从二次变为一次了:
这就意味着本来是曲线的预测函数变为直线了。
这正是通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式。
不过刚才的只是个例子,并不是一定要减小次数最高项的参数值。 
就是为了防止参数的影响过大,在训练时要对参数施加一些惩罚。
那一开始就提到的 λ,是可以控制正则化惩罚的强度:
比如令 λ = 0,那就相当于不使用正则化。
反过来 λ 越大,正则化的惩罚也就越严厉:
分类的正则化
刚才讨论的是回归的情况,对于分类也可以应用正则化。
逻辑回归的目标函数:
分类也是在这个目标函数中增加正则化项就行了, 道理是相同的:
为什么在原来的目标函数上加上负号?
对数似然函数本来以最大化为目标。但是,这次我想让它变成和回归的目标函数一样的最小化问题,所以加了负号。这样就可以 像处理回归一样处理它,所以只要加上正则化项就可以了。
反转符号是为了将最大化问题替换为最小化问题。
反转了符号之后,在更新参数时就要像回归一样,与微分的函数的符号反方向移动才行。
包含正则化项的表达式的微分
目标函数分成了 C(θ) 和 R(θ):
因为是加法,所以对各部分进行偏微分:
C(θ) 是原来的目标函数,讲解回归的时候我们已经求过它 的微分形式了:
所以接下来只要对正则化项进行微分就行了:
最终的微分结果就是这样:
剩下要做的就是把这个微分结果代入到参数更新表达式里去:
不过,我们之 前说过一般不对 θ0 应用正则化。R(θ) 对 θ0 微分的结果为 0,所 以 j = 0 时表达式的 λθj 就消失了。因此,实际上我们需 要像这样区分两种情况:
逻辑回归的流程也是一样的:
不过现在考虑的是最小化问题,所以要注意在前面加上负号:
最后得到:
刚才介绍的方法其实叫 L2 正则化
除 L2 正则化方法之外,还有 L1 正则化方法,它的正则化项 R 是这样的:
L1 正则化的特征是被判定为不需要的参数会变为 0,从而减少变 量个数。
L2 正则化不会把参数变为 0。
刚才说过二次式变为 一次式的例子,用 L1 正则化就真的可以实现了。
L2 正则化会抑制参数,使变量的影响不会过大,而 L1 会直接去除不要的变量。 
使用哪个正则化取决于要解决什么问题,不能一概而论。

4、学习曲线

欠拟合
前面我们聊了很多过拟合的话题,而反过来又有一种叫作欠拟合的状态,用英文说是 underfitting。在这种情况下模型的性能也会变差。
欠拟合是与过拟合相反的状态,所以它是没有拟合训练数据的状态。
比如用直线对图中这种拥有复杂边界线的数据进行分类的情况,无论怎样做都不能很好地分类,最终的精度会很差:
出现这种情况的主要原因就是模型相对于要解决的问题来说太简单了。
过拟合与欠拟合基本上是相反关系,原因不同,解决方案 也不同。
区分过拟合与欠拟合
只根据精度不能判断是哪种不好的拟合。
我们以数据的数量为横轴、以精度为纵轴,然后把用于训练的数据和用于测试的数据画成图来看一看就知道了:
这里我想说的就是如果模型过于简单,那么随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降。
用测试数据先评估根据 2 个训练数据训练好的模型,再评估根据 10 个训练数据训练好的模型,然后依次求出精度。
训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;
反过来说,训练数据变多时,预测精度就会一点点地变高。
用图来展示就是这样的:
将两份数据的精度用图来展示后,如果是这种形状,就说明出现 了欠拟合的状态。
也有一种说法叫作 高偏差,指的是一回事。
这是一种即使增加数据的数量,无论是使用训练数据还是测试数据,精度也都会很差的状态。
图中需要注意的点在这里:
该图为欠拟合:
而在过拟合的情况下,图是这样的,这也叫作 高方差
随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。 只对训练数据拟合得较好,这就是过拟合的特征。
像这样展示了数据数量和精度的图称为学习曲线。
通过学习曲线判断出是过拟合还是欠拟合之后,就可以采 取相应的对策以便改进模型了。

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

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

相关文章

C# 语法进阶 委托

1.委托 委托是一个引用类型,其实他是一个类,保存方法的指针 (指针:保存一个变量的地址)他指向一个方法,当我们调用委托的时候这个方法就立即被执行 关键字:delegate 运行结果: 思…

canvas绘制圆点示例

查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

计算机网络复习1

概论 文章目录 概论计算机网络的组成功能分类性能指标(搞清楚每个时延的具体定义)分层结构协议、接口和服务服务的分类ISO/OSITCP/IP两者的不同 计算机网络的组成 组成部分:硬件,软件和协议(协议:传输数据…

防火墙未开端口导致zookeeper集群异常,kafka起不来

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 主机信息: IPhostname10.0.0.10host1010.0.0.12host1210.0.0.13host13 在这三台主机上部署…

k8s的声明式资源管理(yaml文件)

1、声明式管理的特点 (1)适合对资源的修改操作 (2)声明式管理依赖于yaml文件,所有的内容都在yaml文件当中 (3)编辑好的yaml文件,还是要依靠陈述式的命令发布到k8s集群当中 kubect…

如何在ArcGIS Pro中指定坐标系

在进行制图的时候,为了实现某些特定的效果,需要指定特定的坐标系,但是现有的数据可能不是所需要的坐标系,这时候就需要对现有的数据坐标系进行处理,这里为大家介绍一下ArcGIS Pro中指定坐标系的方法,希望能…

关于标准那些事——第六篇 四象之“白虎”(要素的编写)

两仪生四象——东方青龙(木)、西方白虎(金)、南方朱雀(火)、北方玄武(水) 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 要素的编…

系列五、搭建Naco(集群版)

一、搭建Naco(集群版) 1.1、前置说明 (1)64位Red Hat7 Linux 系统; (2)64位JDK1.8;备注:如果没有安装JDK,请参考【系列二、Linux中安装JDK】 (3&…

Graceful Response 构建 Spring Boot 下优雅的响应处理

一、Graceful Response Graceful Response 是一个 Spring Boot 技术栈下的优雅响应处理器,提供一站式统一返回值封装、全局异常处理、自定义异常错误码等功能,使用Graceful Response进行web接口开发不仅可以节省大量的时间,还可以提高代码质…

SpringBoot 项目如何生成 swagger 文档

推荐使用 springdoc-openapi 的理由 1、springdoc-openapi 是 spring 官方出品,与 springboot 兼容更好(springfox 兼容有坑) 2、springdoc-openapi 社区更活跃,springfox 已经 2 年没更新了 3、springdoc-openapi 的注解更接近 …

如何在Mendix中实现全文检索

功能背景 在日常的应用使用过程中,存在大量希望使用全文检索技术的场景,对资料库中的内容进行查询。Mendix默认的结构化查询方式,适合对特定业务实体进行类似数据库单表的基于SQL语句的查询。那如何在Mendix实现全文检索的功能呢&#…

Flink-【时间语义、窗口、水位线】

1. 时间语义 1.1 事件时间:数据产生的事件(机器时间); 1.2 处理时间:数据处理的时间(系统时间)。 🌰:可乐 可乐的生产日期 事件时间(可乐产生的时间&…

vue $set 报错 Cannot use ‘in‘ operator to search for ‘imgs‘ in

这行代码会报上述错误 本意是当对象属性为空时,添加一个响应式属性. 猜测增加属性可能需要对象的原始地址,这里的 this.imageUploadData.rowData 显然不是原始地址,他是引用的 rowData 变量的地址. 于是改成 , 修改原始地址对象的属性,报错消失 this.$set(rowData, imgs, nu…

LanChatRoom局域网聊天室

CPP已经结课,我提交的项目是Qt的入门项目,局域网聊天室LanChatRoom。 这个代码重构了很多遍。第一遍是照着明哥推荐到书,把代码抄了一遍。 但抄下来之后,各种问题,而且是清朝老代码。抄了一遍之后,对代码的…

论文阅读:基于MCMC的能量模型最大似然学习剖析

On the Anatomy of MCMC-Based Maximum Likelihood Learning of Energy-Based Models 相关代码:点击 本文只介绍关于MCMC训练的部分,由此可知,MCMC常常被用于训练EBM。最后一张图源于Implicit Generation and Modeling with Energy-Based Mod…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前,我们首先使用 langchain 将文档分割成块,然后使用 ElasticsearchStore.from_documents 创建…

IIS通过ARR实现负载均衡

一、实现整体方式介绍 项目中部署在windows服务器上的项目,需要部署负载均衡,本来想用nginx来配置的,奈何iis上有几个项目,把80端口和443端口占用了,nginx就用不了了(因为通过域名访问的,必须要用80和443端口),只能通过IIS的方式实现了。 这里用2个服务在一台机器上…

一个简单的接口自动化测试框架:Python+Requests+Pytest+Allure

项目结构 project:api_test ——api_keyword ————api_key.py:接口关键字驱动类 ——case ————test_cases.py:测试套件和测试用例 ——report_allure(无需创建):allure报告 ——result(…

git 如何撤销历史某次merge

git,如何 撤销某一次历史提交或merge,并保留该版本的后续提交? 场景1: 你有两个功能迭代版本的分支,一个是 15 号上线,一个是25号上线。5号的时候产品突然说,这两个版本一起上,然后…

【计算机图形学】NAP: Neural 3D Articulation Prior

文章目录 1. 这篇论文做了什么事,有什么贡献?2. Related Work铰接物体建模3D中的Diffusion model扩散模型 3. Pipeline铰接树参数化基于Diffusion的铰接树生成去噪网络 4. 实验评价铰接物体生成——以往做法与本文提出的新指标NAP捕捉到的铰接物体分布质…