四、评估已建立的模型

news2024/11/27 18:44:29

别人不讲道理

不是我们跟着不讲道理的理由

1 模型评估

希望fθ(x)对未知数据x输出的预测值尽可能正确。

如何测量预测函数fθ(x)的正确性,也就是精度呢?

观察函数的图形,看它能否很好地拟合训练数据:

我们需要能够定量地表示机器学习模型的精度

2 交叉验证

怎么评估模型呢?

把获取的全部训练数据分成两份:一份用于测试,一份用于训练,然后用测试数据来评估模型。

一般情况下 训练数据 : 测试数据 = 7 :3 或者 8 :2

回归问题的验证

把测试数据考虑进来:

不考虑测试数据:

可以看出,二次函数能更好地拟合数据,如果只考虑测试数据,那么训练的模型只对训练数据是正确的。

模型评估就是像这样检查训练好的模型对测试数据你拟合情况。

对于回归问题,只要在训练好的模型上计算测试数据的误差的平方,再取平均值就可以了:

这个值被称为均方误差或者MSE,全称 Mean Square Error。这个误差越小,精度就越高,模型也就越好。

分类问题的验证

与回归问题一样,先考虑数据的分配:

假设在逻辑回归的情况下,θTx是简单的一次函数,那么只根据训练数据进行训练后,决策边界应该是这样的:

 假如θTx更加复杂,可能就会像这样紧贴着训练数据进行分类:

可以对训练数据完美地进行分类,却完全忽视了测试数据。

所以在分类的时候,还必须检查模型是否能正确。

回到图像的分类问题,我们是根据分类是否成功就会有下面四种情况

1. 图像是横向的,被正确分类了

2. 图像被分类为横向,但实际上不是横向的

3. 图像不是横向的,被正确分类了

4. 图像被分类为非横向,但实际上是横向的

 概括起来:

可以使用表里的4个记号来计算分类的精度。精度的英文是Accuracy,它的计算表达式是这样的:

假如100个数据中80个被正确地分类了,那么精度就是:

精确率和召回率

但是只看精度,并不一定能体现这个模型的好坏。

比如下面这种极端情况:

假设有100个数据,其中95个是Negative。那么,哪怕出现模型把数据全部分类为Negative的极端情况,Accuracy值也为0.95,也就是说模型的精度是95%。

遇到这种情况,只看整体的精度看不出来什么问题。

引入别的指标的示例:

可以得到:

首先我们来看第一个指标——精确率。它的英文是Precision。

被分类为Positive的数据中,实际就是Positive的数据所占的比例:

 这个值越高,说明分类错误越少。

还有一个指标是召回率,英文是Recall。

 在Positive数据中,实际被分类为Positive的数据所占的比例:

这个值越高,说明被正确分类的数据越多。

基于这两个指标来考虑精度是比较好的。

F值

精确率和召回率一个高一个低,需要我们取舍,有些麻烦。

所以就出现了评定综合性能的指标F值

 F值的表达式变形,写成下面这样,二者是相同的:

 除F1值之外,还有一个带权重的F值指标:

把全部训练数据分为测试数据和训练数据的做法称为交叉验证

在交叉验证的方法中,尤为有名的是K折交叉验证

- 把全部训练数据分为k份

- 将k -1 份数据用做训练数据,剩下的一份用做测试数据

- 每次更换训练数据和测试数据,重复进行k次交叉验证

- 最后计算k个精度的平均值,把它作为最终的精度

但是,在训练数据量比较大的情况下,会比较花时间,所以我们必须要确定一个合适的k值。

3 正则化

过拟合

模型只能拟合训练数据的状态被称为过拟合,英文是overfitting。

有几种方法可以避免过拟合:

1. 增加全部训练数据

2. 使用简单的模型

3. 正则化

正则化的方法

回归时候提到的目标函数:

 向这个目标函数增加下面这样的正则化项:

变成:

对这个新的目标函数进行最小化,这种方法就称为正则化。

正则化的效果

首先把函数分成两个部分:

 C(θ)

 R(θ)

 两个函数之和E(θ)=C(θ)+R(θ)

本来是在θ1=4.5处最小,现在是在θ1=0.9处最小。

这就是正则化的效果。它可以防止参数变得过大,有助于参数接近较小的值。

参数的值变小,意味着该参数的影响也会相应地变小。比如,有这样的一个预测函数fθ(x)。

极端一点,假设θ2=0,这个表达式就从二次变为一次了,也就是说没有x2项了。意味着本来是曲线的预测函数变为直线了。

这正是通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式。

就是为了防止参数的影响过大,在训练时要对参数施加一些……一些惩罚。

一开始就提到的λ,是可以控制正则化惩罚的强度。

比如令λ=0,那就相当于不使用正则化:

反过来λ越大,正则化的惩罚也就越严厉:

分类的正则化

逻辑回归的目标函数:

 分类也是在这个目标函数中增加正则化项就行了,道理是相同的。

包含正则化项的表达式的微分

 因为是加法,所以对各部分进行偏微分:

最终的微分结果:

 把这个微分结果代入到参数更新表达式里去:

一般不对θ0应用正则化。R(θ)对θ0微分的结果为0,所以j=0时表达式4.3.14中的λθj就消失了。因此,实际上我们需要像这样区分两种情况:

 逻辑回归的流程也是一样

4 学习曲线

前面我们聊了很多过拟合的话题,而反过来又有一种叫作欠拟合的状态,用英文说是underfitting。在这种情况下模型的性能也会变差。

比如用直线对图中这种拥有复杂边界线的数据进行分类的情况,无论怎样做都不能很好地分类,最终的精度会很差。

区分过拟合与欠拟合

考虑一下使用这样的10个训练数据进行回归的场景

 这里我们先假设fθ(x)是一次函数。接着,只随便选择其中的2个数据用作训练数据:

在这个状态下,2个点都完美拟合,误差为0。

把10个数据都用来训练:

如果模型过于简单,那么随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降。

以数据的数量为横轴、以精度为纵轴的图上,形状大体上就是这样的:

一开始精度很高,但随着数据量的增加,精度一点点地变低了。

接下来用测试数据来评估一下。假设在刚才的10个训练数据之外,还有测试数据。我们用这些测试数据来评估各个模型,之后用同样的方法求出精度,并画成图。

训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。

将两份数据的精度用图来展示后,如果是这种形状,就说明出现了欠拟合的状态。也有一种说法叫作高偏差,指的是一回事。

图中需要注意的点在这里:

而在过拟合的情况下,图是这样的:

随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。

图中需要注意的点在这里:

像这样展示了数据数量和精度的图称为学习曲线。

通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型了。

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

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

相关文章

2022 JavaScript调查:TypeScript持续主导,Vite和Tauri大受欢迎

StateOfJS 最新发布了 2022 年 JavaScript 现状调查报告指出,Solid 和 Qwik 等新兴前端框架正在挑战 React 的权威。该报告基于对近 40,000 名 Web 开发人员的调查,数量几乎是去年的两倍。 JavaScript 可能发展得很快,但 JavaScript 开发人员…

4. Shuffle 5. 内存的管理

4. Shuffle (1) Shuffle 的原理和执行过程 在Scala中,Shuffle是指对集合或序列进行随机打乱或重新排列的操作。它可以用于打乱集合中元素的顺序,以便在后续的操作中获得更好的随机性或均匀性。 在Scala中,可以使用scala.util.Random类的shu…

只会Excel制表?搭配上这个工具,让你的办公效率无限翻倍

在每次考试之后,老师们通常需要进行繁重的工作,包括使用Excel汇总学生的考试成绩、计算平均分和成绩排名等。然而,现在学校不允许公布学生成绩,这给老师们增加了额外的工作量和麻烦。一些老师采取了将学生成绩表截成一条一条的成绩…

使用HummerRisk进行K8s安全合规检测

1.简介 HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生的安全和治理问题。核心能力包括混合云的安全治理和云原生安全检测。 今天我们来通过 HummerRisk 云原生安全检测能力来对Kubernetes进行安全合规检测 2.检测步骤 ①首先创建一个Kubernetes账…

spring复习:(19)单例bean是在哪里被加入到一级缓存的?

AbstractBeanFactory的doGetBean方法&#xff1a; 如果是第一次调用getBean时&#xff0c;会执行到下边的代码&#xff1a; getSingleton的代码如下&#xff1a; public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) {Assert.notNull(bea…

windows安装mysql8.0.23版本成功示例-免安装

windows安装mysql8.0.23版本成功示例 一.通过mysql-installer-*.msi安装包的方式1.安装准备1.1 官网下载地址1.2 选择合适的版本点击下载 2.安装mysql 二.通过mysql-8.0.23-winx64.zip压缩包免安装方式1.安装准备1.1 下载官网压缩包1.2 解压后配置文件my.ini信息1.3 配置my.ini…

共筑开源新长城 龙蜥社区走进开放原子校源行-清华大学站

6 月 28 日&#xff0c;以“聚缘于校&#xff0c;开源共行”为主题的 2023 年开放原子校源行活动在清华大学成功举行。本次活动由开放原子开源基金会和清华大学共同主办&#xff0c;来自各行业的 22 位大咖共聚校园共话开源。龙蜥社区技术专家边子政受邀进行技术分享&#xff0…

安达发|如何选择性价比高的APS软件?

生产计划和调度决不是越精确越好。理论上&#xff0c;APS可以调度每一分钟&#xff0c;可以调度每一个人&#xff0c;每一台设备的每一个动作。这只对自动化生产线有意义。 我国企业管理水平参差不齐。许多工业企业可能不像一百年前的泰勒时代那样管理得那么好。对于一些工业企…

搭载率突破40%!智能数字座舱比拼,车企还有降本空间吗?

进入2023年&#xff0c;汽车行业的「降本」风潮&#xff0c;驱动产业链上下游开始思考智能化、电动化的投入产出。除了显性的硬件成本&#xff08;继续堆料&#xff0c;强调性价比&#xff0c;还是减配&#xff09;&#xff0c;软件及背后的开发成本&#xff0c;对于车企来说&a…

C++STL:关联容器之map和multimap

文章目录 1. map概述成员函数创建C map容器的几种方法迭代器map获取键对应值的几种方法map insert()插入数据的4种方式map emplace()和emplace_hint()方法 2. multimap概述成员函数创建C multimap容器的方法 1. map 概述 作为关联式容器的一种&#xff0c;map 容器存储的都是…

自研组件-createIntersectionObserver实现图片懒加载组件

项目&#xff1a;taro3vue3 描述&#xff1a;图片懒加载通过滚动距离的计算进行加载&#xff0c;这里记录下用createIntersectionObserver来实现 createIntersectionObserver介绍任意门 原理比较简单&#xff0c;通过监听图片&#xff0c;出现在显示区域内就渲染图片&#xf…

Qt Creator常用快捷键及技巧

1.[Qt Creator常用快捷键及技巧提升编码效率] (https://blog.csdn.net/luoyayun361/article/details/105431913) 介绍了一些小技巧比如: 自动补全函数快捷注释函数前输入/** 回车自动补全注释alt 整列进行编写或者 左右移动,非常有用某一行的复制 ctrlaltup (或者down)向上向…

远程CentOs安装了MySQL,本地的Nvaicat/SqlYog无法正常连接?

#1、创建新用户 mysql> CREATE USER ‘username’‘%’ IDENTIFIED BY ‘userpassword’; #给普通用户远程连接的权限&#xff1a; #2、授权 myuser 用户对指定库的所有表&#xff0c;所有权限并设置远程访问 mysql> GRANT ALL ON 指定库.* TO ‘username’‘%’; #3、更…

查看域名的ip地址

1."winr" -- ping www.baidu.com 2."nslookup www.baidu.com"

点云数据标注方法研究

1.点云可视化工具 1.1 cloudcompare下载安装 sudo snap install cloudcompare 启动方法: #open pointcloud viewer cloudcompare.ccViewer #open the main software cloudcompare.CloudCompare 使用上述第一条命令&#xff0c;读取的点云某一帧数据&#xff0c;我的点云格…

作为帮助文档使用,语雀和Baklib哪个更适合?

语雀和Baklib都是常见的在线文档协作工具&#xff0c;它们都提供了方便的文档编辑、协作和分享功能。然而&#xff0c;它们在一些方面存在差异&#xff0c;这取决于你的具体需求和使用场景。 下面将对语雀和Baklib进行综合比较: 1. 功能和编辑体验 语雀和Baklib都具有强大的…

Golang学习之结构体和内存对齐、map设计思路

Golang学习之结构体和内存对齐、map设计思路 结构体和内存对齐内存对齐如何确定一个结构体的对其边界 map设计思路哈希表与扩容bmap的结构练习map扩容规则 结构体和内存对齐 cpu要想从内存读取数据&#xff0c;需要通过地址总线&#xff0c;把地址传输给内存&#xff0c;内存准…

【ONE·Linux || 地址空间与进程控制(一)】

总言 进程地址空间和进程控制相关介绍。 文章目录 总言1、进程地址空间1.1、程序地址空间初识1.1.1、介绍程序地址空间划分及地址空间初步验证1.1.2、地址空间再次综述演示1.1.3、两个补充问题&#xff1a; 1.2、地址空间是什么1.2.1、阶段认识一&#xff1a;故事引入1.2.2、阶…

redis浅析

一 什么是NoSQL&#xff1f; Nosql not only sql&#xff08;不仅仅是SQL&#xff09; 关系型数据库&#xff1a;列行&#xff0c;同一个表下数据的结构是一样的。 非关系型数据库&#xff1a;数据存储没有固定的格式&#xff0c;并且可以进行横向扩展。 NoSQL泛指非关系…

论文笔记:AugGPT: Leveraging ChatGPT for Text Data Augmentation

AugGPT&#xff1a;利用 ChatGPT 进行文本数据增强 摘要1 介绍2 相关工作2.1 数据增强2.2 小样本学习2.3 超大型语言模型2.4 ChatGPT&#xff1a;现在与未来 3 数据集3.1 亚马逊数据集3.2 症状数据集3.3 PubMed20k数据集 4 方法4.2 使用 ChatGPT 进行数据增强4.3 小样本文本分类…