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

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.mzph.cn/news/606311.shtml

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

相关文章

pandas保存style到excel文件中

更多pandas style用法请参考:https://pandas.liuzaoqi.com/doc/chapter8/style.html 示例程序 import numpy as np import pandas as pd# 示例数据 dataframe pd.DataFrame({"date": pd.date_range("2024-01-01", "2024-02-01"),&…

D51+D52|接雨水

503.下一个更大元素ll 初始思路:这样这道题就变成了一道很纯粹的单调栈问题,因为只涉及了一个数组。但又因为这个数组是一个循环数组所以问题又变的有些复杂。 初始思路: 在循环数组的问题中,比较需要考虑的就是数组中最后一个…

web——德州扑克

1.此案例只用于学习 2.未接入游戏规则 HTML代码部分 <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width"><meta name"Poker Skin" content&quo…

模式识别实验三

实验三 一  实验名称 感知器设计 二 目的和意义 使用感知器完成线性分类任务 三 操作步骤或算法结构 数据预处理。载入数据文件&#xff08; iris.csv 文件&#xff09;中的数据&#xff0c;并将其分成样本向量矩阵X和样本分类结果向量 G \bf G G。 给 4 4 4 列向量的…

【Vue3】2-5 : 指令系统与事件方法及传参处理

本书目录&#xff1a;点击进入 一、标签属性中的使用 - 指令系统 1.1 那么模板语法是否可以在标签属性中进行使用呢? ▶ 当然可以&#xff1a;使用 指令系统 二、指令系统 2.1 v-bind 2.2 v-on 三、实战 3.1 methods 选项 3.2 $event语法 一、标签属性中的使用 - 指令…

RT_Thread 调试笔记:时间相关,时钟管理函数,延时,定时器、 毫秒转换为时分秒 等

说明&#xff1a;记录日常使用 RT_Thread 开发时做的笔记。 持续更新中&#xff0c;欢迎收藏。 1. 延时函数 1. us延时函数 rt_hw_us_delay(rt_uint32_t us);//输如数据是us rt_hw_us_delay(200);//输入数据是us 2. ms延时函数 rt_thread_mdelay(1000);//输入数据是ms 2…

【教学类-综合练习-07】20240102 大4班 综合材料 (涂色类)对称动物面具,对称蝴蝶、头饰等

背景需求 年终了&#xff0c;清理库存&#xff0c;各种打印的题型纸都拿出来&#xff0c;当个别化学习材料 教学过程&#xff1a; 时间&#xff1a;2024年1月2日 班级&#xff1a;大4班 人数&#xff1a;25人 这次混了一点“EBRU湿拓郁金香”的纸片&#xff0c; 裁剪花朵…

从零学Java - String类

Java String类 文章目录 Java String类1 String1.1 常用两种创建方式1.2 比较两种创建方式1.3 字符串不可变性1.4 面试题 2 常用方法2.1 练习 3 可变字符串3.1 常用方法3.2 验证StringBuilder的高效性3.3 练习3.4 面试题: 4 正则表达式4.1 元字符4.2 其他字符4.2.1 预定义字符4…

基于Tosca和Terraform的多云资源编排探索

01 导言 随着企业采用多云战略和迁移到云平台&#xff0c;需要依赖不同的云资源来支持业务系统。传统的手动开通和配置资源关联关系的方法在多云环境下变得耗时且复杂&#xff0c;给运维带来困难。 为了应对多云环境中基础设施管理的复杂性&#xff0c;寻找一种高效的多云资源编…

mysql索引失效的情况

目录 1破坏最左前缀法则2在索引列上做任何计算、函数操作&#xff0c;会导致索引失效而转向全表扫描。3存储引擎不能使用索引中范围条件右边的列4Mysql在使用不等于时无法使用索引会导致全表查询5is null可以使用索引&#xff0c;但是is not null无法使用索引6like以通配符开头…

Packet Tracer - Configure AAA Authentication on Cisco Routers

Packet Tracer - 在思科路由器上配置 AAA 认证 地址表 目标 在R1上配置本地用户账户&#xff0c;并使用本地AAA进行控制台和vty线路的身份验证。从R1控制台和PC-A客户端验证本地AAA身份验证功能。配置基于服务器的AAA身份验证&#xff0c;采用TACACS协议。从PC-B客户端验证基…

软件测试|测试平台开发-Flask入门:Flask动态路由

前言 之前我们介绍了flask发送http请求&#xff0c;以及flaskURL的详解&#xff0c;我们使用的路由都是固定的&#xff0c;一个路径和一个视图函数绑定&#xff0c;当访问这条路径时会触发相应的处理函数。但是当我们要处理更为复杂的情况时&#xff0c;比如我们有多个用户&am…

Mybatis面经

Mybatis &#x1f4d1;前言 本文主要是【Mybatis】——Mybatis面经的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

【书生·浦语大模型实战营03】《基于 InternLM 和 LangChain 搭建你的知识库》学习笔记

《基于 InternLM 和 LangChain 搭建你的知识库》 常见术语 RAG: Retrieval Augmented Generation&#xff0c;检索增强生成 1. 大模型开发范式 1.1 RAG VS Finetune RAGFinetune低成本可个性化微调可实时更新知识覆盖面广受基座模型影响大成本高昂单次回答知识有限无法实时…

Elasticsearch:Search tutorial - 使用 Python 进行搜索 (二)

这个是继上一篇文章 “Elasticsearch&#xff1a;Serarch tutorial - 使用 Python 进行搜索 &#xff08;一&#xff09;” 的续篇。在今天的文章中&#xff0c;我们接着来完成如何进行分页及过滤。 分页 - pagination 应用程序处理大量结果通常是不切实际的。 因此&#xff0…

代码随想录二刷 |二叉树 | 验证二叉搜索树

代码随想录二刷 &#xff5c;二叉树 &#xff5c; 验证二叉搜索树 题目描述解题思路递归法迭代法 代码实现递归法迭代法 题目描述 98.验证二叉搜索树 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征&#xff1a; 节点的左子…

Eureka的自我保护机制

一&#xff1a;Eureka的自我保护机制是什么&#xff1f; 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式&#xff0c;Eureka Server将会尝试保护其服务注册表中的信息&#xff0c;不再删除服务注册表中的数据&#xff0c;也就是不…

关于电脑屏幕亮度的调整,看这篇文章就够了

你可能需要定期更改屏幕亮度。当外面很亮的时候,你想把它调大,这样你就能看到。当你在黑暗的房间里时,你会希望它变暗,这样就不会伤害你的眼睛。降低屏幕亮度也有助于节省电力并延长笔记本电脑的电池寿命。 除了手动更改屏幕亮度外,Windows还可以通过多种方式自动更改屏幕…

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm)

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm) 常见的归一化操作有&#xff1a;批量归一化&#xff08;Batch Normalization&#xff09;、层归一化&#xff08;Layer Normalization&#xff09;、实例归一化&#xff08;Instance Normaliza…

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&…