白话机器学习笔记(三)评估已建立的模型

news2024/11/29 8:58:05

模型评估

在进行回归和分类时,为了进行预测,我们定义了函数 f θ ( x ) f_\theta(x) fθ(x),然后根据训练数据求出了函数的参数 θ \theta θ

如何预测函数 f θ ( x ) f_\theta(x) fθ(x)的精度?看它能否很好的拟合训练数据?

image-20230719171157625

我们需要能够定量的表示机器学习模型的精度,这就是模型的评估。

交叉验证

回归问题的验证

把获取的全部训练数据分成两份:一份用于测试,一份用于训练。前者来评估模型。一般3:7或者2:8这种训练数据更多的比例。

如图点击量预测的回归问题

image-20230719171547592

image-20230719171559974

image-20230719171609997

f θ ( x ) f_\theta(x) fθ(x)是二次函数拟合效果更好,但考虑测试数据的话,二次函数完全不行。

对于回归,只要在训练好的模型上计算测试数据的误差的平方,再取其平均值即可,假设训练数据有 n n n个,可以这样计算。
1 n ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) ) 2 \frac1n\sum\limits_{i=1}^n(y^{(i)}-f_\theta(x^{(i)}))^2 n1i=1n(y(i)fθ(x(i)))2
对于点击量的回归问题, y ( i ) y^{(i)} y(i)就是点击量, x ( i ) x^{(i)} x(i)就是广告费。

这个值被称为均方误差或者MSE(Mean Square Error)

这个误差越小,精度就越高,模型就越好。

分类问题的验证

数据这样分配

image-20230719172449102

θ T x \theta^Tx θTx是一次函数

image-20230719172529610

θ T x \theta^Tx θTx更复杂,可能会这样紧贴着训练数据进行分类。

image-20230719172610515

我们是根据图像为横向的概率来分类,分类是否成功就会有下面 4 种情况。

image-20230719172707460

image-20230719172743042

可以这样计算分类的精度

A c c u r a c y = T P + T N T P + F P + F N + T N Accuracy=\frac{TP+TN}{TP+FP+FN+TN} Accuracy=TP+FP+FN+TNTP+TN

它表示的是在整个数据集中,被正确分类的数据 T P TP TP T N TN TN所占的比例。

精确率和召回率

有时候只看 A c c u r a c y Accuracy Accuracy会出问题

如果数据量极其不平衡

image-20230719173204756

模型把全部数据分类为 Negative,不是好模型,但精度会很高。

所以我们加入别的指标

精确率

P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP

image-20230719173414397

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

召回率

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

image-20230719173643345

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

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

但是一个高一个低就不好评估,为此出现判定综合性能的指标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}+\frac1{Recall}} Fmeasure=Precision1+Recall12

变形后

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

F值称为F1值更准确

还有带权重的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+\beta^2)\cdot Precision\cdot Recall}{\beta^2\cdot Precision+Recall} WeightedFmeasure=β2Precision+Recall(1+β2)PrecisionRecall

之前的精确率和召回率是以 T P TP TP为主进行计算的,也可以以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

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

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

  • 把全部训练数据分为 K K K
  • K − 1 K − 1 K1 份数据用作训练数据,剩下的 1 份用作测试数据
  • 每次更换训练数据和测试数据,重复进行 K K K 次交叉验证
  • 最后计算 K K K 个精度的平均值,把它作为最终的精度

假设进行4折交叉验证,那么就会如图这样测试精度。

image-20230719175005740

全部训练数据的量很大,不切实际增大 K K K值会非常耗时,要确定一个合适的 K K K值。

正则化

过拟合

只能拟合训练数据的状态被称为过拟合

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

  • 增加全部训练数据的数量
  • 使用简单的模型
  • 正则化

正则化的方法

对于回归问题

E ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) 2 E(\theta)=\frac12\sum\limits_{i=1}^n(y^{(i)}-f_\theta(x^{(i)})^2 E(θ)=21i=1n(y(i)fθ(x(i))2

向这个目标函数增加一个正则化项

R ( θ ) = λ 2 ∑ j = 1 m θ j 2 R(\theta)=\frac\lambda2\sum\limits_{j=1}^m\theta_j^2 R(θ)=2λj=1mθj2 ( m m m是参数的个数)

一般不对 θ 0 \theta_0 θ0应用正则化,假如预测函数的表达式为 f θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 f_\theta(x)=\theta_0+\theta_1x+\theta_2x^2 fθ(x)=θ0+θ1x+θ2x2 m = 2 m=2 m=2意味着正则化的对象参数为 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 θ 0 \theta_0 θ0这种只有参数的项为偏置项,一般不对它进行正则化。

λ \lambda λ是决定正则化项影响程度的正的常数。

C ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) 2 C(\theta)=\frac12\sum\limits_{i=1}^n(y^{(i)}-f_\theta(x^{(i)})^2 C(θ)=21i=1n(y(i)fθ(x(i))2

R ( θ ) = λ 2 ∑ j = 1 m θ j 2 R(\theta)=\frac\lambda2\sum\limits_{j=1}^m\theta_j^2 R(θ)=2λj=1mθj2

image-20230719181808107

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

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

λ \lambda λ是控制正则化惩罚的强度。

λ = 0 \lambda=0 λ=0,相当于不使用正则化。

λ \lambda λ越大,正则化的惩罚就越严厉。

分类的正则化

l o g L ( θ ) = ∑ i = 1 n ( y ( i ) l o g f θ ( x i ) + ( 1 − y ( i ) ) l o g ( 1 − f θ ( x ( i ) ) ) ) logL(\theta)=\sum\limits_{i=1}^n(y^{(i)}logf_\theta(x^{i}) +({1-y^{(i)}})log(1-f_\theta(x^{(i)}))) logL(θ)=i=1n(y(i)logfθ(xi)+(1y(i))log(1fθ(x(i))))

分类也是在这个目标函数中增加正则化项就行了。

l o g L ( θ ) = − ∑ i = 1 n ( y ( i ) l o g f θ ( x i ) + ( 1 − y ( i ) ) l o g ( 1 − f θ ( x ( i ) ) ) ) + λ 2 ∑ j = 1 m θ j 2 logL(\theta)=-\sum\limits_{i=1}^n(y^{(i)}logf_\theta(x^{i}) +({1-y^{(i)}})log(1-f_\theta(x^{(i)})))+\frac\lambda2\sum\limits_{j=1}^m\theta_j^2 logL(θ)=i=1n(y(i)logfθ(xi)+(1y(i))log(1fθ(x(i))))+2λj=1mθj2

对数似然函数本来以最大化为目标,加负号使其变为和回归的目标函数一样的最小化问题,像处理回归一样处理它,只要加上正则化项就可以了。

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

E ( θ ) = C ( θ ) + R ( θ ) E(\theta)=C(\theta)+R(\theta) E(θ)=C(θ)+R(θ)

各部分进行偏微分
∂ E ( θ ) ∂ θ j = ∂ C ( θ ) ∂ θ j + ∂ R ( θ ) ∂ θ j \frac{\partial E(\theta)}{\partial\theta_j}= \frac{\partial C(\theta)}{\partial\theta_j}+ \frac{\partial R(\theta)}{\partial\theta_j} θjE(θ)=θjC(θ)+θjR(θ)
∂ C ( θ ) ∂ θ j = ∑ i = 1 n ( f θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial C(\theta)}{\partial\theta_j}=\sum\limits_{i=1}^n(f_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θjC(θ)=i=1n(fθ(x(i))y(i))xj(i)

∂ R ( θ ) ∂ θ j = λ θ j \frac{\partial R(\theta)}{\partial\theta_j}=\lambda\theta_j θjR(θ)=λθj

∂ E ( θ ) ∂ θ j = ∑ i = 1 n ( f θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ θ j \frac{\partial E(\theta)}{\partial\theta_j}=\sum\limits_{i=1}^n(f_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\lambda\theta_j θjE(θ)=i=1n(fθ(x(i))y(i))xj(i)+λθj

得参数更新表达式

θ j : = θ j − η ( ∑ i = 1 n ( f θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ θ j ) \theta_j:=\theta_j-\eta(\sum\limits_{i=1}^n(f_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\lambda\theta_j) θj:=θjη(i=1n(fθ(x(i))y(i))xj(i)+λθj) ( j > 0 ) (j>0) (j>0)

这种方法叫L2正则化

还有L1正则化,它的正则化项 R R R

R ( θ ) = λ ∑ i = 1 m ∣ θ i ∣ R(\theta)=\lambda\sum\limits_{i=1}^m|\theta_i| R(θ)=λi=1mθi

L1 正则化的特征是被判定为不需要的参数会变为 0,从而减少变量个数。而 L2 正则化不会把参数变为 0。二次式变为一次式的例子,用 L1 正则化就真的可以实现了。

L2 正则化会抑制参数,使变量的影响不会过大,而 L1 会直接去除不要的变量。

学习曲线

欠拟合:模型性能很差,没有拟合训练数据的状态

image-20230719184507350

区分过拟合与欠拟合

两种精度都是很差,如何辨别?

image-20230719184730844

随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。只对训练数据拟合得较好,这就是过拟合的特征。

这也叫作高方差。

欠拟合的图像如下

image-20230719184912237

这是一种即使增加数据的数量,无论是使用训练数据还是测试数据,精度也都会很差的状态。

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

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

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

相关文章

Dockerfile 创建镜像,构建LNMP+wordpress架构

目录 一、Dockerfile 构建镜像 1.Dockerfile 构建 nginx镜像 1.1创建 nginx Dockerfile 目录 1.2编写 Dockerfile 文件 1.3构建nginx镜像 2.Dockerfile 构建 mysql 镜像 2.1创建 mysql Dockerfile 目录 2.2修改mysql配置文件 2.3编写 Dockerfile 文件 2.4构建mysql镜…

Redis源码篇 - Ziplist数据结构

Ziplist是一种内存优化的list存储结构,通过使用连续的内存空间存储,来减少内存碎片化,同时和链表的不同还有,它不存储前后指针,而是通过变长的字节存储前节点元素长度,通过计算长度来实现节点的查找。它是一…

因材施教,有道发布“子曰”教育大模型,落地虚拟人口语教练等六大应用

因材施教的教育宗旨下,大模型浪潮中,网易有道凭借其对教育场景的深入理解和对商业化的理性思考,为行业树立了垂直大模型的典范。 7月26日,教育科技公司网易有道举办了“powered by 子曰”教育大模型应用成果发布会。会上重磅推出了…

好莱坞怕了, Gen-2全面开启免费使用

仿佛一声惊雷炸响,7月24日Runway 宣布,Gen-1 和 Gen-2 已经彻底开放,任何人都可以注册一个账号免费尝试。生成的视频长度为 4 秒,每秒消耗 5 个积分,利用免费额度可以生成二十六个视频。如果免费积分耗尽,付…

【前端学java】JAVA中类的基础概念

theme: cyanosis java中的类语法和前端的类语法几乎是一致的。 基础代码示例 JAVA的面向对象编程和JS的类语法十分接近,我们看一段代码 public class Object_oriented {public static void main(String[] args) {// 打工人 前的PeoPle是类型People dagongren ne…

微信自动回复怎么设置?

宝子们 你们有遇到或正面临以下情况吗? NO.1 “消息爆炸” 小能,是一位在微信公众号分享美食和旅行的博主 由于内容质量高、互动性强,他的粉丝数量迅速增长 然而,随之而来的是大量的留言和私信 小明根本无法应付 他曾经试…

GFLv2 论文学习

1. 解决了什么问题? 预测定位质量对于目标检测很重要,在 NMS 时它能提供准确的得分排序,提高模型的表现。现有方法都是通过分类或回归的卷积特征来预测定位质量得分。 2. 提出了什么方法? 受到 GFLv1 的 general distribution …

端口复用与重映射

端口复用和重映射 STM32F1有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。 大家都知道,MCU都有串口…

Linux中的ldd命令使用方法总结

ldd(List Dynamic Dependencies)命令是Linux系统中的一个工具 它用于打印出一个可执行文件所依赖的共享库文件(动态链接库) 当你运行ldd命令,并跟上一个可执行文件作为参数,它会列出该可执行文件所需要的…

Spingboot 整合netty-socket.io

Spingboot 整合netty-socket.io 依赖 注意版本号&#xff0c;不然client版本不对的话也是连不上的 https://github.com/mrniko/netty-socketio ​ <dependency><groupId>com.corundumstudio.socketio</groupId><artifactId>netty-socketio</art…

使用TensorFlow训练深度学习模型实战(下)

大家好&#xff0c;本文接TensorFlow训练深度学习模型的上半部分继续进行讲述&#xff0c;下面将介绍有关定义深度学习模型、训练模型和评估模型的内容。 定义深度学习模型 数据准备完成后&#xff0c;下一步是使用TensorFlow搭建神经网络模型&#xff0c;搭建模型有两个选项…

年轻小伙爆肝ARST

关于 ARTS 的释义 —— 每周完成一个 ARTS&#xff1a; ⭐️● Algorithm: 每周至少做一个 LeetCode 的算法题 ⭐️● Review: 阅读并点评至少一篇技术文章 ⭐️● Tips: 学习至少一个技术技巧 ⭐️● Share: 分享一篇有观点和思考的技术文章 希望通过此次活动能聚集一波热爱技…

GitLab 删除项目

1.点击头像 2.点击Profile 3.选择要删除的项目点进去 4.settings-general-Advances-expand 5.然后在弹出框中输入你要删除的项目名称即可

【WEB开发】Java获取高德POI(关键词搜索法)实现数据展示

前言 该篇文章是关键词搜索法获取高德poi&#xff0c;但鉴于无法突破200条记录的上限&#xff0c;所以采用了本方法进行区/县循环检索。开始之前我们首先需要明白一些常识 poi是兴趣点&#xff0c;它本身除了经纬度&#xff0c;还记录了一些信息&#xff0c;如名称、地址、联…

mirror功能

实现方式 mirror逻辑的工作阶段&#xff1a; ngx在log phase之后&#xff08;在ngx_http_free_request处调用&#xff09;已完成向client端返回response&#xff0c;在log phase之后完成close connection&#xff08;短链接&#xff09;&#xff0c;在该阶段处理mirror逻辑不…

【Redis】高级篇: 一篇文章讲清楚Redis的单线程和多线程

目录 面试题 Redis到底是多线程还是单线程&#xff1f; 简单回答 详解 Redis的“单线程” Redis为什么选择单线程&#xff1f; 后来Redis为什么又逐渐加入了多线程特性&#xff1f; Redis为什么快&#xff1f; 回答 IO多路复用 Unix网络编程的5种IO模型 主线程和IO…

温湿度传感器的工作原理及应用领域你了解多少呢?

传感器是一种将物理量转换为电信号的装置&#xff0c;用于检测温度、湿度、压力、光强、震动等物理量。它能够将检测到的物理量转换为电信号&#xff0c;并输送到计算机、单片机等设备进行分析和处理。生产生活中&#xff0c;不同的场所和环境对温湿度有着特殊要求&#xff0c;…

看完即会,抓取微信小程序数据包教程

在给VIP学员答疑的时候&#xff0c;有很多小伙伴问到能不能抓取到微信小程序数据呢&#xff1f;答案当然是肯定的&#xff0c;通过Fiddler或者Charles这些主流的抓包工具都可以抓得到&#xff0c;在IOS平台抓取微信小程序和https请求都是一样的设置&#xff0c;接下来给大家通过…

【代码随想录day20】验证二叉搜索树

题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 思路 最开始想简单…

Linux 学习记录58(ARM篇)

Linux 学习记录58(ARM篇) 本文目录 Linux 学习记录58(ARM篇)一、GIC相关寄存器1. 系统框图2. 中断号对应关系 二、GICD寄存器1. GICD_CTLR2. GICD_ISENABLERx3. GICD_IPRIORITYRx4. GICD_ITARGETSRx5. GICD_ICPENDRx 三、GICC寄存器1. GICC_PMR2. GICC_CTLR3. GICC_IAR4. GICC_…