机器学习入门之模型性能评估与度量

文章目录

    • 性能评估
      • 误差
      • 欠拟合和过拟合
      • 模型选择与数据拟合
    • 性能度量
      • 二分类的混淆矩阵
        • 查全率
        • 查准率
        • F1分数
      • P-R曲线
      • ROC曲线
      • AUC

性能评估

机器学习的模型有很多,我们在选择的时候就需要对各个模型进行对比,这时候就需要一个靠谱的标准,能够评估模型的性能

这里的性能不是说算的有多快,而是说预测的结果和真实情况进行比较的来的结果

误差

在我们对训练的结果进行分析之前,首先需要思考模型训练过程中是否可能有误差的产生,因为这同样会影响结果和对模型选择产生比较大的影响

误差主要会出现在数据集的三个部分,分别是训练集、测试集、新样本

  1. 训练集——训练误差
  2. 测试集——测试误差
  3. 新样本——泛化误差

所谓的训练误差指的是训练集本身存在缺陷,从而模型提取的错误的特征信息,例如一个只认识红色苹果的模型,遇到绿色苹果时,他就不认为这是苹果了

一般情况下拿到一个数据集,会将其分成两部分,分别作为训练集和测试集,那么对于训练完成的模型,此时测试集也相当于是一个新样本

训练模型的时候,一开始训练误差和测试误差都会比较高,但是训练次数越多,训练误差会越来越小,但是测试误差可能会变大,而且模型的复杂度也会随之提升

这样的现象我们分别称之为欠拟合和过拟合

欠拟合和过拟合

欠拟合的概念很好理解,其实就是由于数据量不够大,模型的准确率不够多,也就是一开始我们学习的时候没有足够的理解一样,有时也称之为高偏差(high bias)

而过拟合则是属于过犹不及的那种感觉,就好像呆板僵化的思维,好像有些人做数学题,尽管题目非常接近,仅仅是更换了数字,但是他仍然认为这是两种完全不同的题目,这样带来的一种效果就是对于训练集(已经做过的题目)正确率很高,但是对于新样本的能力就会比较差,有时也称为高方差(high variance)

想要克服这两种现象,对于欠拟合是比较容易的,例如在决策树算法中扩展分支,在神经网络中增加训练的轮数,但是过拟合就困难的多,主要是因为模型过于复杂,我们需要的是简化模型,这种纠正策略称之为正则化(regularization)

模型选择与数据拟合

我们在模型选择时一定不能一味追求降低训练误差,因为想要有较强的数据拟合能力,就需要将模型的复杂度不断提升

也就是需要遵循一条原则,避免过拟合并且提高泛化能力

例如我们想要对一组数据想要拟合出一个多项式函数

假设有一个数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x n , y n ) } T=\{(x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)\} T={(x1,y1),(x2,y2),,(xn,yn)} x i x_i xi为样本的观测值(特征、自变量), y i y_i yi是对应的输出观测值(因变量)

我们想要找到一个m次多项式函数能够拟合这些数据,目标是能够较好拟合并且预测

设这个m次多项式函数的一般形式为: f m ( x , w ) = w 0 x 0 + w 1 x 1 + w 2 x 2 + ⋯ + w m x m = ∑ j = 0 m w j x j f_m(x,w)=w_0x^0+w_1x^1+w_2x^2+\dots+w_mx^m=\sum_{j=0}^{m}w_jx^j fm(x,w)=w0x0+w1x1+w2x2++wmxm=j=0mwjxj

对于这个公式的解读:

  1. 有m+1个特征值,x的次数从0到m
  2. 有m+1个需要通过训练(学习)得到的权值参数,w的下标从0到m
  3. 这里参数的正负,绝对值大小就分别代表了对于这个特征的态度,绝对值越大权重越大
  4. 可以有意识的调整某些权值让他趋近于0,从而抛弃某些特征,称之为权重衰减(weight decay),在某种程度上可以避免过拟合

那如何训练学习这个m+1个参数呢,常用的策略之一是最小二乘法(Method of Least Squares)

通过这个方法拟合出来的函数值 f ( x i , w ) f(x_i,w) f(xi,w)(得到的预测结果)和真实的 y i y_i yi是由误差的,数学上称之为残差(residual)

e i = f ( x i , w ) − y i e_i=f(x_i,w)-y_i ei=f(xi,w)yi

高斯证明了,在这个残差集合独立同分布的假定下,最小二乘法有一个优势,就是在所有的无偏线性估计类中方差最小,也就是当残差的平方和最小时,拟合函数的相似度最高,也就是如下函数取最小值时,拟合效果最好

L ( w ) = 1 2 ∑ i = 1 n ( f ( x i , w ) − y i ) 2 L(w)=\frac{1}{2}\sum_{i=1}^{n}(f(x_i,w)-y_i)^2 L(w)=21i=1n(f(xi,w)yi)2

性能度量

上面我们讲到的其实是性能评估的一般思路,接下来我们就需要找到一个标准,能够确切的评判性能的高低了

二分类的混淆矩阵

二值分类器(Binary Classifier)是在机器学习中应用最广泛的分类器之一,二值分类指的是正类和负类,我们为了方便陈述称之为真和假

主要分四类

  • 真正类(True Positive,TP),实际为真,被模型预测为真,为了方便理解,我们说他是应该被选上且已经被选上了的
  • 假正类(False Positive,FP),实际为假,被模型预测为真,应该没被选上(被忽略)但是被选上了的
  • 真负类(True Negative,TN),实际为假,被模型预测为假,应该被忽略且已经被忽略了的
  • 假负类(False Negative,FN),实际为真,被模型预测为假,应该被忽略但被选上了的

这四类加起来就是总样本数,然后第一类和第三类是正确预测了的,第二类和第四类是预测失误了的,分别称之为误报、第一类错误,漏报、第二类错误

这四组样本就构成了混淆矩阵(confusion matrix),确实容易混淆

由这四组样本就能产生一些比例作为判断,再通过这些比例之间的关系,我们就能找到更优的模型了

主要有以下几个,查全率,查准率,F1分数,P-R曲线,ROC曲线

我们尽量避免过于不说人话的描述,用最简单容易理解的话来讲清楚这些概念

在说这些概念之前,我们先画一个简单的示意图,可以配合起来理解

image.png

查全率

查全率(Recall,R,召回率),表示分类准确的正类样本数占全部正类样本数的比例,说人话就是在所有应该被选上的样本中,选上了的比例是多少,也就是左边那一半TP占的比例 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP

查准率

查准率(Precision,P),表示被预测正确的正类样本数占分类器判定为正类样本总数的比例,说人话就是所有被选上的样本中,选对了的样本比例是多少,也就是这个圆里面左边占的部分比例 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP

需要注意的是,查准率和准确率是有区别的,准确率应该是正确判断的样本除总样本得到的比例

一般来说查准率和查全率是呈负相关的,那有没有可以兼顾这样两个比率的呢,或者说有没有一个值可以用来调整他们之间的比重关系

F1分数

本质上来说F1分数是查准率和查全率的调和平均数

1 F 1 = 1 2 ( 1 P + 1 R ) \frac{1}{F1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R}) F11=21(P1+R1)整理一下就是 F 1 = 2 × P × R P + R F1=2\times\frac{P\times R}{P+R} F1=2×P+RP×R

想要有所偏向,就可以引入参数 β \beta β

1 F β = 1 1 + β 2 ( 1 P + β 2 R ) \frac{1}{F_\beta}=\frac{1}{1+\beta^2}(\frac{1}{P}+\frac{\beta^2}{R}) Fβ1=1+β21(P1+Rβ2)整理一下就是 F β = ( 1 + β 2 ) 1 1 P + β 2 R F_\beta=(1+\beta^2)\frac{1}{\frac{1}{P}+\frac{\beta^2}{R}} Fβ=(1+β2)P1+Rβ21

β > 1 \beta>1 β>1时, β 2 R \frac{\beta^2}{R} Rβ2项占比较大,即查全率的影响更大,反之则查准率的影响更大

P-R曲线

P-R曲线其实很简单,因为查准率和查全率大致成负相关,就可以分别将查全率和查准率作为坐标轴画出图形,那么这其中变化的是什么呢,其实就是我们设定的临界值,之后的ROC曲线也是类似,选取的标准不同,查全率和查准率的数值也会不同

当两个模型的P-R曲线都绘制出来之后,我们就可以根据曲线进行抉择了

第一种情况是一个模型的曲线完全在另一个曲线的上方,也就是查全率和查准率都高于另一个,那就直接选了

但是更通常的情况是交替出现,这时候就有一个所谓的平衡点(Break-Even Pont、BEP),就是y=x这条直线和两条曲线的交点,一般认为谁的交点在上方,谁就更优

P-R曲线的优点是非常直观,但是缺点也很明显,受样本分布的影响非常大

于之相比,ROC曲线就相对更优,也因此作为重要的指标之一

ROC曲线

于P-R曲线对应的,ROC曲线的横纵坐标也是两个比率

第一个比率是真阳性率(True Positive Rate,TPR),简单说就是应该被忽略但没有被忽略的占比, T P R = F P T N + F P TPR=\frac{FP}{TN+FP} TPR=TN+FPFP

第二个比率是假阳性率(False Positive Rate,FPR),简单说就是应该被选中并且已经被选中的占比, F P R = T P T P + F N FPR=\frac{TP}{TP+FN} FPR=TP+FNTP

把假阳性率作为横轴,真阳性率作为纵轴,就能画出ROC曲线了,并且变化的仍然是选取的标准不同

现在已经绘制出了对应的ROC曲线了,应该如何选取更优的模型呢

AUC

AUC是Area Under Curve,意思是曲线下的区域,那其实就是ROC曲线与X轴的面积

一般认为AUC在0.5到1之间,如果不在这个范围内,只需要将模型的预测概率P反转成1-P就能得到一个更好的分类器

并且AUC的值越高,我们认为这个模型就越优

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

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

相关文章

我们说的数据分析,到底要分析些什么?

作者 Gam 本文为CDA志愿者投稿作品 “我们说数据分析,到底要分析些什么?” 数据分析这个话题自从进入人们的视线以来,这个话题就成为人们茶余饭后的谈资,但是一千个人眼中就有一千个哈姆雷特,就意味着每个人对数据分…

如何将 redis 快速部署为 docker 容器?

部署 Redis 作为 Docker 容器是一种快速、灵活且可重复使用的方式,特别适合开发、测试和部署环境。本文将详细介绍如何将 Redis 部署为 Docker 容器,包括 Docker 安装、Redis 容器配置、数据持久化、网络设置等方面。 步骤 1:安装 Docker 首…

Java 函数式编程 的基础使用2-BiConsumer

1、创建函数时&#xff0c;确定函数的参数类型和具体操作。 2、使用accept接收函数参数&#xff0c;并执行函数操作。 public class MyBiConsumer {public static void main(String[] args) {BiConsumer<String, Integer> printNameAndAge (param1, param2) -> {Sys…

国内首个图计算平台团体标准发布,创邻科技参与编撰

2024年&#xff0c;由中国通信标准协会批准的团体标准《大数据 图计算平台技术要求与测试方法》&#xff08;编号&#xff1a;T/CCSA 470—2023&#xff09;&#xff08;下称&#xff1a;标准&#xff09;正式实施。该标准于1月4日在全国团体标准信息平台&#xff08;https://w…

Golang | Leetcode Golang题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; func generateMatrix(n int) [][]int {matrix : make([][]int, n)for i : range matrix {matrix[i] make([]int, n)}num : 1left, right, top, bottom : 0, n-1, 0, n-1for left < right && top < bottom {for column : lef…

触发器的启用和禁用

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在 Oracle 数据库中&#xff0c;所创建的触发器可以根据情况&#xff0c;灵活修改它的状态&#xff0c;使其有效或者无效&#xff0c;即启用或者禁用。 其语法格式如下所示。…

前端基础学习html(2)

目录 表格标签&#xff1a; 列表标签&#xff1a; 表格标签&#xff1a; <!-- 表格基本架构 --><!-- tr表示一行&#xff0c;td表示一行内单元格 --><!--th为第一行表头加粗居中显示 --><table border"1"><thead><tr><th&g…

[Kubernetes] 安装KubeSphere

选择4核8G&#xff08;master&#xff09;、8核16G&#xff08;node1&#xff09;、8核16G&#xff08;node2&#xff09; 三台机器&#xff0c;按量付费进行实验&#xff0c;CentOS7.9安装Docker安装Kubernetes安装KubeSphere前置环境: nfs和监控安装KubeSphere masternode1no…

RTSP,RTP,RTCP

机器学习 Machine Learning&#xff08;ML&#xff09; 深度学习&#xff08;DL&#xff0c;Deep Learning&#xff09; CV计算机视觉&#xff08;computer vision&#xff09; FFMPEG&#xff0c;MPEG2-TS,H.264,H.265,AAC rstp,rtp,rtmp,webrtc onvif,gb28181 最详细的音…

leetCode76. 最小覆盖子串

leetCode76. 最小覆盖子串 题目思路 代码 // 双指针 哈希表 // 这里cnt维护过程&#xff1a;先找到能够匹配T字符串的滑动窗口&#xff0c;然后这个cnt就固定了&#xff0c;因为i向前移动的同时&#xff0c;j也会维护着向前 // 就是当又出现能够满足T字符串的时候&#xff0…

如何提升制造设备文件汇集的可靠性和安全性?

制造设备文件汇集通常指的是将与制造设备相关的各种文档和资料进行整理和归档的过程。这些文件可能包括但不限于&#xff1a; 生产数据&#xff1a;包括生产计划、订单信息、生产进度等。 设计文件&#xff1a;如CAD图纸、设计蓝图、产品模型等。 工艺参数&#xff1a;用于指…

揭秘设计师热议的7款XD插件!

Adobe XD软件具有从照片编辑和合成到数字绘画、动画和UI设计的一流优势。借助其功能&#xff0c;您可以在灵感来袭时随时随地创建它。令人惊讶的是&#xff0c;它的插件有1000&#xff0c;包括一键磨皮、一键挖掘、一键制作身份证照片等&#xff0c;无论创作什么&#xff0c;Ad…

《十六》QT TCP协议工作原理和实战

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QTcpSocket组件实现基于TCP的网络通信…

FIFO Generate IP核使用——异步复位

FIFO Generator IP核提供了一个复位输入&#xff0c;当该输入被激活时&#xff0c;它会复位所有的计数器和输出寄存器。对于块RAM或分布式RAM实现&#xff0c;复位FIFO并不是必需的&#xff0c;可以在FIFO中禁用复位引脚。共有两种复位类型选项&#xff1a;异步复位和同步复位。…

初识Linux -- Linux的背景和发展史介绍

点赞关注不迷路&#xff01;&#xff0c;本节涉及初识Linux&#xff0c;主要为背景介绍和xshell登录主机。 1.Linux背景 1.1 发展史 Linux从哪里来&#xff1f;它是怎么发展的&#xff1f;在这里简要介绍Linux的发展史。 要说Linux&#xff0c;还得从UNIX说起。 1.2 UNIX发…

毕业设计uniapp+vue有机农产品商城系统 销售统计图 微信小程序

本人在网上找了一下这方面的数据发现农村中的信心普及率很是低农民们都不是怎么会用手机顶多就是打打电话发发短信&#xff0c;平时不太会上网更不会想到通过网络手段去卖出自己的劳作成果—农产品&#xff0c;这无疑大大浪费了农民的劳动成果和国家资源也大大打击了人们的生产…

《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框

1、概述 源码放在文章末尾 该项目实现了一个带有标签动画、焦点动画、正确提示、错误警告的单行输入框控件。下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef LABELEDEDIT_H #define LABELEDEDIT_H#include <QObject> #include <QWidget>…

搜索算法系列之四(斐波那契)

以下算法被验证过&#xff0c;如有什么问题或有补充的欢迎留言。 前言 斐波那契数列&#xff0c;又称黄金分割数列&#xff0c;是由意大利数学家&#xff08;Leonardo Fibonacci&#xff09;在1202年提出的。这个数列的递推关系是F(0)1&#xff0c;F(1)1&#xff0c;F(n)F(n-…

在Android中,如何通过Kotlin协程处理多个API调用

在Android中&#xff0c;如何通过Kotlin协程处理多个API调用 在Android开发中&#xff0c;如何使用Kotlin协程处理多个API调用的示例呢&#xff1f;假设我们已经对Kotlin协程有了一定的了解&#xff0c;包括定义、简单用例和示例等。现在&#xff0c;让我们来看一些真实的Andr…

[Java、Android面试]_22_APP启动流程(中频问答)

欢迎查看合集&#xff1a; Java、Android面试高频系列文章合集 本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&am…