✨机器学习笔记(七)—— 交叉验证、偏差和方差、学习曲线、数据增强、迁移学习、精确率和召回率

news2024/10/12 3:03:24

机器学习笔记(七)

  • 1️⃣评估模型
    • 🎗️使用测试集评估模型
    • 🎗️交叉验证集(cross validation)
  • 2️⃣偏差和方差(Bias / Variance)
  • 3️⃣学习曲线(Learning curves)
    • 🎗️High bias
    • 🎗️High variance
  • 4️⃣数据增强(Data augmentation)
  • 5️⃣迁移学习(Transfer learning)
  • 6️⃣评估指标
    • 🎗️精度(Accuracy)
    • 🎗️精确率(Precision)
    • 🎗️召回率(Recall)
    • 🎗️F 值(Fmeasure)

1️⃣评估模型

🎗️使用测试集评估模型

🎈使用数据集训练模型时,可能会导致过拟合现象,模型很好的拟合了训练数据,但是无法泛化到新的数据样例中。

在这里插入图片描述

🤓 为了更好的评估模型,可以将数据集中的70%划分为训练集,30%划分为测试集。比较一下在训练集训练出来的模型在测试集的表现如何,大概可以评估模型好坏。

在这里插入图片描述

✨计算测试集和训练集中的代价 J t e s t J_{test} Jtest J t r a i n J_{train} Jtrain,两者的数值差距可以反映一些模型的问题。

在这里插入图片描述

🎈对于过拟合的情况, 通过对比 J t e s t J_{test} Jtest J t r a i n J_{train} Jtrain 可以看出这不是一个好模型,这就达到了评估模型的目的。

在这里插入图片描述

🎗️交叉验证集(cross validation)

🎈我们可以通过训练集和测试集去选择一个相对较好的模型,对于一个多项式模型,可以通过训练集训练出 d d d 阶的模型 d : d: d: 1~10),我们想知道哪个模型的泛化程度最好,这时候可以拿测试集去评估,计算 J t e s t J_{test} Jtest J t e s t J_{test} Jtest 最小的 d d d 阶模型的就是最好的模型,泛化程度最好。但是,相当于是使用测试集去选择了 d d d,可以看作测试集“变相”参与了最终模型的训练,其实它的泛化误差是一个乐观的估计,它比实际上的泛化误差要小。

在这里插入图片描述

✨要更好的评估模型的话,我们需要用一个完全和模型无关的测试集去评估,那么谁去选出这个 d d d 呢?这时需要我们去多划分一个交叉验证集

在这里插入图片描述

🤓这样可以通过训练集训练出多个模型的参数,交叉验证集选择出性能最好模型,最后用测试集评估模型。由于测试集完全没有参与到最终模型的选择中,这时的测试集对模型的泛化程度的评估是公平的而不是乐观的,这种方法是模型选择的一种最佳实践。

在这里插入图片描述

✨同样,可以将该最佳实践应用到神经网络架构的选择中,通过训练集拟合参数 w w w, b b b,再通过交叉验证集选择性能最好的模型(即 J c v J_{cv} Jcv 最小的模型),最后使用测试集的 J t e s t J_{test} Jtest 去评估模型的泛化程度。

在这里插入图片描述

2️⃣偏差和方差(Bias / Variance)

🎈对于单个特征时,我们可以通过图表直接看出模型是欠拟合还是过拟合,左图中的模型为欠拟合,通常欠拟合也成为高偏差;右图中的模型为过拟合,通常过拟合成为高方差。而对于多个特征时,不好用图像之间展示,我们可以直接考察模型的偏差和方差来诊断模型的好坏。

✨对于欠拟合的模型,它有 J t r a i n J_{train} Jtrain J c v J_{cv} Jcv 都高的性质,因为它即不能很好的拟合训练数据,泛化性也差;对于过拟合的数据,它有低 J t r a i n J_{train} Jtrain 和高 J c v J_{cv} Jcv 的性质,因为它非常好的拟合了训练数据,但泛化性相当差;而一个好的模型 J t r a i n J_{train} Jtrain J c v J_{cv} Jcv 都比较低。我们通过偏差和方差来诊断模型就是去研究它们的 J t r a i n J_{train} Jtrain J c v J_{cv} Jcv

在这里插入图片描述

🤓可以看到随着模型多项式次数的变化, J t r a i n J_{train} Jtrain J c v J_{cv} Jcv 的值是如何变化的。

在这里插入图片描述

✨下图说明了如何去诊断模型的偏差和方差,总得来说偏差的高低就是看 J t r a i n J_{train} Jtrain 的大小,方差的高低就是看 J c v J_{cv} Jcv J t r a i n J_{train} Jtrain 的差值大小。(注意:通常总是 J c v J_{cv} Jcv > J t r a i n J_{train} Jtrain

在这里插入图片描述

同时具有高偏差和高方差的情况:

在这里插入图片描述


🎈正则化参数对偏差和方差的影响:

在这里插入图片描述

3️⃣学习曲线(Learning curves)

在这里插入图片描述

🎗️High bias

✨对于高偏差(欠拟合)的情况,一开始数据量很小甚至只有 1 个时, J t r a i n J_{train} Jtrain 将非常小, J c v J_{cv} Jcv 会比较大;数据量越来越多的话,模型会为了最小化 J c v J_{cv} Jcv 逐渐去调整,显然 J c v J_{cv} Jcv 会越来越小,但是数据量上来了,模型拟合训练数据就不想拟合1、2个点那么准确,所以 J t r a i n J_{train} Jtrain 越来越大。最终达到一个稳定状态(欠拟合),高 J t r a i n J_{train} Jtrain J t r a i n ≈ J c v J_{train} ≈ J_{cv} JtrainJcv,此后再怎么添加数据和基准水平的差距都难以缩小,所以添加数据量将不能帮助解决高偏差问题

在这里插入图片描述

🎗️High variance

✨对于高方差(过拟合)的情况,在低数据量时出现过拟合, J c v J_{cv} Jcv >> J t r a i n J_{train} Jtrain J t r a i n J_{train} Jtrain 很低。增加数据量后可以很好的解决高方差问题,让模型达到基准水平。

在这里插入图片描述

4️⃣数据增强(Data augmentation)

🎈增加数据量经常可以帮助我们得到更好的模型,但是提供的数据量可能就那么多,无法得到更多的数据量或者可能得到更多数据量需要很多资金成本,而数据增强方法可以在现有的数据样例上创建新的数据

✨对图像数据通过放大、缩小、旋转不同角度、改变对比度、镜像、网格随机扭曲等方法创造更多新的图像数据;对音频数据通过剪辑增加不同噪声等方式,创造更多新的音频数据。这些新数据也非常具有挑战性,可以让模型有更强的泛化程度。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5️⃣迁移学习(Transfer learning)

🎈Transfer learning: using data from a different task.

✨使用其他任务已经训练好的模型作为自己的预训练模型,这就是迁移学习。例如,我们要训练一个数字识别的模型,但是我们可以使用别人训练好的大型动物识别模型作为我们的预训练模型,只需将最后一层输出层替换,训练出输出层的参数,就成为了一个数字识别模型。① 可以选择只训练输出层的参数。② 可以重新训练整个模型的参数,导入的模型参数作为初始化参数,这样也比随机初始化参数的梯度下降更快。(小型模型倾向于选择 ①,大型模型倾向于选择 ②)

在这里插入图片描述
🧐为什么可以迁移学习?因为对于同样的输入类型,图像、文字、音频等,在训练过程中会有一些共通的训练情况。例如,对于训练图像,不管是什么任务,对于图像类型的训练都会存在边缘特征训练、拐角特征训练、曲线特征训练等情况。所以如果想搭建一个图像处理模型,直接迁移其他模型来训练,总比自己随机初始化的效果要好。(类比会骑单车的人学习骑电动车总比小白学电动车要更快更好)

6️⃣评估指标

🎈有一个回归问题,对图像是横向的还是纵向的进行了分类,关于分类是否成功就有4种情况:
● 图像是横向的,被正确分类了
● 图像被分类为横向,但实际上不是横向的
● 图像不是横向的,被正确分类了
● 图像被分类为非横向,但实际上是横向的

在这里插入图片描述
🎈分类结果为正的情况是 Positive、为负的情况是 Negative。分类成功为 True、分类失败为 False。

在这里插入图片描述

🎗️精度(Accuracy)

✨对于一个模型,我们希望它分类正确的数据越多越好,这才是一个好的模型。可以使用 精度(Accuracy) 来衡量模型整体的正确率。
A c c u r a c y = T P + T N T P + F P + F N + T N ,它表示的是在整个数据集中,被正确分类的数据 T P 和 T N 所占的比例。 Accuracy = \frac {TP+TN} {TP + FP + FN + TN},它表示的是在整个数据集中,被正确分类的数据 TP 和 TN 所占 的比例。 Accuracy=TP+FP+FN+TNTP+TN,它表示的是在整个数据集中,被正确分类的数据TPTN所占的比例。

假如 100 个数据中 80 个被正确地分类了, A c c u r a c y = 80 100 = 0.8 Accuracy = \frac {80} {100}= 0.8 Accuracy=10080=0.8,值越高精度越高,也就意味着模型越好。

🧐但是对于数据量极其不平衡的情况:

在这里插入图片描述
😞假设有 100 个数据,其中 95 个是 Negative。那么,哪怕出现模型把数据全部分类为 Negative 的极端情况,Accuracy 值也为 0.95,也就是说模型的精度是 95%。但是一个把所有数据都分类为 Negative 的模型,不能说它是好模型。这种情况,只看精度就看不出来模型存在的问题了,所以需要引入一些其他指标。

对于这种情况,我们假设模型的结果:

在这里插入图片描述

个数
Positive 数据5 个
Negative 数据95 个
True Positive1 个
False Positive2 个
False Negative4 个
True Negative93 个
Accuracy94%

🎗️精确率(Precision)

P r e c i s i o n = T P T P + F P Precision = \frac {TP} {TP+FP} Precision=TP+FPTP
✨这个指标只关注 TP 和 FP。根据表达式来看,它的含义是在被分类为 Positive 的数据中,实际就是 Positive 的数据所占的比例:

在这里插入图片描述

计算得出: P r e c i s i o n = 1 1 + 2 = 1 3 = 0.333... 计算得出:Precision = \frac {1}{1+2}=\frac13=0.333... 计算得出:Precision=1+21=31=0.333...

🤓这个值越高,说明分类错误越少。拿这个例子来说,虽然被分类为 Positive 的数据有 3 个,但其中只有 1 个是分类正确的。所以计算得出的精确率很低。

🎗️召回率(Recall)

R e c a l l = T P T P + F N Recall=\frac {TP} {TP+FN} Recall=TP+FNTP

✨这个指标只关注 TP 和 FN。根据表达式来看,它的含义是在Positive 数据中,实际被分类为 Positive 的数据所占的比例:

在这里插入图片描述
计算得出: R e c a l l = 1 1 + 4 = 1 5 = 0.2 计算得出:Recall=\frac 1 {1+4}=\frac 1 5=0.2 计算得出:Recall=1+41=51=0.2

🤓这个值越高,说明被正确分类的数据越多。拿这个例子来说,虽然 Positive 数据共有 5 个,但只有 1 个被分类为 Positive。所以计算得出的召回率也很低。

🎗️F 值(Fmeasure)

🎈由上可知,如果是一个精确率和召回率都很高的模型,它当然是个好模型,不过通常情况下精确率和召回率会一个高一个低,需要我们取舍。那取它们的平均值怎么样?假设现在有两个模型,
它们的精确率和召回率如下:

在这里插入图片描述

🧐可以看出模型B过于极端。如果将所有的数据都分类为 Positive,那么召回率就是 1.0。但是这样一来,Negative 数据也会被分类为 Positive,所以精确率会变得很低。但是对于两个模型的平均值,会发现模型 B 的更高。但它是把所有数据都分类为 Positive 的模型,精确率极低,仅为 0.02,并不能说它是好模型。所以只看平均值确实无法知道模型的好坏。

✨这时需要评定综合性能的指标 F F F出场了:

F m e a s u r e = 2 1 P r e c i s i o n + 1 R e c a l l Fmeasure=\frac 2 {\frac 1 {Precision} + \frac 1 {Recall}} Fmeasure=Precision1+Recall12

🎈此时,精确率和召回率只要有一个低,就会拉低 F 值。再计算一下前面两个模型的 F F F 值:

在这里插入图片描述

和简单取平均值时得到的结果不同,模型 A 的 F F F 值更高。这说明该指标考虑到了精确率和召回率的平衡。(有时称 F F F 值为 F 1 F1 F1 值会更准确, F 1 F1 F1 值在数学上是精确率和召回率的调和平均值。)

✨除 F1 值之外,还有一个带权重的 F F F 值指标:
W e i g h t e d F m e a s u r e = ( 1 + β 2 ) ⋅ P r e c i s i o n ⋅ R e c a l l β 2 ⋅ P r e c i s i o n + R e c a l l WeightedFmeasure=\frac{(1+β^2) · Precision · Recall} {β^2 · Precision + Recall} WeightedFmeasure=β2Precision+Recall(1+β2)PrecisionRecall

我们可以认为 F F F 值指的是带权重的 F F F 值,当权重为 1 时才是刚才介绍的 F 1 F1 F1 值。

🧐前面介绍的精确率和召回率都是以 TP 为主进行计算的,那么也能以 TN 为主吗?完全没问题,以 TN 为主来计算精确率和召回率的表达式是这样的:
P r e c i s i o n = T N T N + F N Precision=\frac {TN} {TN+FN} Precision=TN+FNTN
R e c a l l = T N T N + F P Recall=\frac {TN} {TN+FP} Recall=TN+FPTN

🌹当数据不平衡时,使用数量少的那个会更好。

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

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

相关文章

自动化分析背后,一站式数据分析平台!

自动化分析背后,一站式数据分析平台! 前言一站式数据分析平台 前言 在如今的企业管理中,数据已经不再是简单的存储和备份,而是成为了决策的核心驱动力。尤其是在面对海量数据的情况下,企业急需一个能够高效处理、分析…

学习笔记之指针进阶(10.11)

a[0]就相当于数组名arr,a[0]1就相当于arr1,arr1是数组中下一个元素的地址,所以a[0]1就是数组中下一个元素的地址,(把二维数组中的每一个数组看作一个元素) 以上解释是错误的,a[0]不是整个数组的…

Leetcode——数组:移除元素—27.移除元素

知识点 双指针,在设置时,设置两个指针,一个用来寻找目标值,一个用来表示新数组的下标。 当找到不是目标值的元素时,将其添加到新数组中,如果是目标值,直接掠过 寻找目标值的指针会遍历整个数…

从commit校验失效问题探究husky原理

一、背景 之前创建的项目,发现代码 commit 提交的时候没有了任何校验,具体表现: 一是 feat fix 等主题格式校验没有了二是代码 lint 不通过也能提交 尝试解决这个问题,并深入了解husky的实现原理,将相关的一些知识点…

Excalidraw:在线手绘风格白板、图表绘制工具

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Excalidraw 是一个开源的虚拟白板,用于绘制手绘风格的图表、线框图等。它支持多人实时协作,并使用端到端加密,确保…

钢铁行业3大改造方向 智能仪器亦起到重要作用!

钢铁企业新的改造方向主要包括超低排放改造、能效改造和数字化转型。‌这些政策旨在提升钢铁行业的环保水平、能效和智能化水平。其中智能仪器的加入,为钢铁企业数字化智能化自动化改造带来新的活力。 具体来说,到2027年,钢铁行业将实现以下目…

《Linux从小白到高手》综合应用篇:详解Linux系统调优之深入理解Huge Pages和Transparent Huge Pages

本篇深入介绍Linux Huge Pages和Transparent Huge Pages. 我在前一篇博文(《Linux从小白到高手》综合应用篇:详解Linux系统调优之内存优化)中说过,很多人可能对大页内存(Huge Pages)和透明大页(…

[spring]spring事务和事务传播机制

文章目录 一. 事务Spring中的事务实现编程式事务声明式事务TransactionalTransactional作用 Transactional详解1. rollbackFor2. 事务隔离级别mysql事务隔离级别Spring事务隔离级别 3. 事务传播机制什么是事务传播机制事务传播机制有哪些Spring事务传播机制使用REQUIRED(加入事…

【翻译】自定义 Qt Designer 窗体

原文地址:Customizing Qt Widgets Designer Forms 【翻译】Qt Designer 最新中文手册文档(Qt6) Qt Designer设计窗体保存为一个UI文件时,一些窗体设定参数,比如栅格、默认布局的边距(margin)和间…

【cpp】模板函数 模板类 特化 书写格式备忘

outline 收集的关于使用 模板函数 模板类 特化 偏特化的笔记 用以快速回忆 模板类 普通使用 类内定义成员函数 #include <iostream> using namespace std;template <typename T> class MyContainer { private:T element;public:MyContainer(T elem) : element(…

低代码可视化-uniapp商城首页小程序-代码生成器

在设计一个小程序的首页时&#xff0c;包含轮播图、通知栏和商品列表这三个元素是非常常见且有效的布局方式。这样的设计既能够吸引用户的注意力&#xff0c;又能够高效地展示信息和商品。 轮播组件 小程序首页幻灯片通常位于小程序的顶部或显著位置&#xff0c;通过滑动屏幕可…

selenium自动化测试之Junit

1. 常用的注解 将junit的索引添加到pom文件&#xff1a; <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId&…

看镭速如何解决半导体行业跨国传输大文件效率低的难题

随着全球经济的融合&#xff0c;半导体行业迎来了迅猛的发展&#xff0c;跨国合作变得司空见惯。相应地&#xff0c;跨国大文件传输的需求也在持续增长。不过&#xff0c;半导体行业在跨国传输大文件时&#xff0c;常常遇到效率不高和安全难以保障的问题。因此&#xff0c;半导…

H3C IPsec+IKE 野蛮模式配置实验

H3C IPsecIKE 野蛮模式配置实验 实验拓扑 ​​ 实验需求 按照图示配置 IP 地址&#xff0c;R3出接口自动获取公网IP地址在 R1 上配置默认路由连通公网在 R1 和 R3 上配置 IPsec VPN&#xff0c;使两端私网可以互相访问 实验步骤 按照图示配置 IP 地址&#xff0c;R3出接口…

上传图片到github上,生成链接在Typora中使用(解决Typora的md文件在分享时的丢失问题)

上传图片到github上,生成链接在Typora中使用(解决Typora的md文件在分享时的丢失问题) 在GitHub上从操作 创建一个 GitHub 仓库: 登录 GitHub,创建一个新的仓库来存储图片。 生成 GitHub 令牌: 在 GitHub 中,前往“Settings” > “Developer settings” > “Pers…

Rpc框架开发——客户端框架设计

目录 一、Requestor 二、RpcCaller 三、Publish_Subscribe 四、Registry-Discovery 五、Client 在客户端的模块划分中&#xff0c;基于以上理解的功能&#xff0c;可以划分出这么几个模块 Protocol&#xff1a;应用层通信协议模块 Network&#xff1a;网络通信模块 Disp…

前端vue部署网站

这里讲解一下前端vue框架部署网站&#xff0c;使用工具是 xshell 和 xftp &#xff08;大家去官网安装免费版的就行了&#xff09; 服务器 我使用的阿里云服务器&#xff0c;买的是 99 一年的&#xff0c;淘宝有新手9.9 一个月服务器。可以去用&#xff0c;学生的话是有免费三…

进程状态|进程优先级

目录 一、进程状态 1.什么是进程状态 2.进程状态都包含什么&#xff1f; 3.进程状态的查看 4.进程退出 &#xff08;1&#xff09;进程退出的步骤 &#xff08;2&#xff09;僵尸进程 &#xff08;3&#xff09;孤儿进程 二、进程优先级 1.进程优先级是什么&#xff…

二分查找一>0~n-1中缺失的数字(点名)

1.题目&#xff1a; 2.解析&#xff1a;方法一&#xff1a;用哈希表&#xff1a;记录存在的数字&#xff0c;找到哈希表为空的数字输出 Set<Integer> set new HashSet<>();for(int x : records) set.add(x);for(int i 0; i < set.size(); i){if(!set.contain…

重新学习Mysql数据库3:Mysql存储引擎与数据存储原理

本文转自互联网 本系列文章将整理到我在GitHub上的《Java面试指南》仓库&#xff0c;更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客&#xff1a; www.how2playlife.com 本文是微信公众号【Java技术江湖…