【深度学习基础】一篇入门模型评估指标(分类篇)

news2025/1/6 20:11:01

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

目录

1. 前言

2. 模型评估综述

2.1 什么是模型评估

2.2 评估类型

2.3 模型泛化能力

2.4 过拟合与欠拟合

3. 常见的分类模型评估方式

3.1 准确率(Accuracy)

3.2 精确率(Precision)

3.3 召回率(Recall)

3.4 F1-score

3.5 ROC曲线及AUC值

3.6 PR曲线

4. 代码实现

5. 总结 


1. 前言

本篇针对的是刚刚接触机器学习的友友~~

在猫猫刚刚入门机器学习时,有位学长问我,召回率是什么?

猫猫那是一脸懵逼,然后他又来了三连问。准确率是什么?精准率是什么?有什么曲线评估模型性能吗?

在当时猫猫的脑海中,模型好坏不就是看他预测准了多少个样本,准确率多少吗?哪来那么多东西,哈哈哈哈哈哈,机器学习还是好玩的。

想到很多刚刚入门的友友也可能苦恼于模型评估指标,猫猫便写了这篇博客,希望能给大家带来点帮助。

2. 模型评估综述

2.1 什么是模型评估

       模型评估是指在机器学习中,对于一个具体方法输出的最终模型,使用一些指标和方法来评估它的泛化能力。这一步通常在模型训练和模型选择之后,正式部署模型之前进行。模型评估不针对模型本身,而是针对问题和数据,因此可以用来评价不同方法的模型的泛化能力,以此决定最终模型的选择。

模型评估:量化模型在解决目标问题上的能力

2.2 评估类型

       机器学习的基本任务大致分为三类,分别是分类(Classification)回归(Regression)聚类(Clustering),在本文仅介绍分类的模型评估。

2.3 模型泛化能力

       模型的泛化能力是机器学习的一个重要概念和指标。是指一个模型在训练集之外的未知数据上的表现能力,泛化能力强的模型能够正确学习到数据的普遍规律并将其运用到新的数据上从而做出准确的预测。

       简单地说,当模型在训练样本上表现良好,并且能在新的数据样本上保持相同的表现,我们就可以说这个模型的泛化能力强。

2.4 过拟合与欠拟合

       过拟合与欠拟合是机器学习中常见的两个概念,描述的是模型在训练数据和未知数据上表现的差异。下图中第一到第三的图分别是欠拟合、正好和过拟合三种状态。

过拟合:

       过拟合表现为在训练数据上表现优秀的那在新数据集上表现较差,通常是因为模型过于复杂,学习到了数据集中的细节和噪声而不是数据的真实分布,因而泛化能力差。

举个很经典的例子,当我们设计一个模型用于判断一个物品是否是树叶,而训练集中有几个样本的叶片边缘带有尖刺,模型作者希望他的模型能够符合贴近他的每一个样本,因而将带有“尖刺边缘”这一不是明显特征的特点纳入了参数中,这样一来,模型就能够完美贴合训练样本,但在应用时会发现模型容易钻牛角尖,会将不带尖刺边缘的样本排除,无法识别不带尖刺边缘的树叶,这就导致了模型的泛化能力差。

解决模型过拟合的问题,有以下几种方法:

  • 增加数据量以提供更多信息,减少噪声的影响
  • 简化模型,减少模型参数的数量
  • 通过交叉验证评估模型的泛化能力

欠拟合:

       欠拟合则与过拟合相反,由于模型过于简单,无法学习到数据的足够特征,无法正确捕捉数据的复杂性和变化,没有学习到数据的规律。这就导致模型不管是在训练样本还是未知样本上的表现都不佳。

常见的解决欠拟合的方法有:

  • 增加模型的复杂度,如增加更多的特征或使用更复杂的模型
  • 收集更多的数据,提供更加丰富的信息给模型
  • 增加训练时间或者调整模型的超参数

3. 常见的分类模型评估方式

       混淆矩阵是分类模型巩固的一个重要工具,可以直观展示模型的预测结果和实际结果之间的关系,通常由以下四个部分构成:

  • 真正类 (True Positives, TP): 模型正确地预测正类的数量。
  • 假负类 (False Negatives, FN): 模型错误地将正类预测为负类的数量。
  • 假正类 (False Positives, FP): 模型错误地将负类预测为正类的数量。
  • 真负类 (True Negatives, TN): 模型正确地预测负类的数量。

 二元混淆矩阵格式如下:

多元分类矩阵格式如下:

3.1 准确率(Accuracy)

准确率是指模型正确预测的样本总数占总样本总数的比例,其计算公式为:

Accuracy=\frac{TN+TF}{TN+FN+TP+FP}=\frac T{T+F}

3.2 精确率(Precision)

       精确率的概念比较容易与准确率的概念混淆,准确率的目标是所有样本,计算的是所有分类正确样本占总样本的多少,而精确率是指在所有被模型预测为正类的样本中,实际为正类的样本的比例,关注的是被模型分为此类的数据中有多少是正确的。

       当我们使用精确率(下使用Precision代替)作为考量时,优点是不容易出现假正类,但是,当precision值过高时,容易出现模型偏向某一类别的情况,因为此时模型会倾向于预测多数类别而忽略了少数类别的预测。

       举一个例子,假设在一个疾病诊断问题中,疾病发生的实际情况(正类)非常罕见。如果模型仅仅通过预测大多数人都是健康的(负类)来提高Precision,那么它可能会忽略真正的病例,因为这些病例在数据中占比很小。这样的模型虽然精确度高,但其实用性非常有限,因为它未能有效识别和预测少数但重要的正类样本。

       在混淆矩阵中,这表现为某一行的T除以本行上所有数字的和,如下列表格标注了颜色的A行就是红色的TA值除以TA加FA的和。

其公式为:

Precision=\frac{TP}{TP+FP}

3.3 召回率(Recall)

       召回率(下使用Recall替代)衡量的是模型正确识别为正类的实例(真正类)占所有实际正类实例的比例。当recall值高时,模型会更容易捕捉到正类,但也会导致假正类出现的比例增加的情况。

       举个例子说明,假设我们有一个用于检测信用卡欺诈的模型,其中正类(欺诈)非常罕见。在10,000个交易中,可能只有100个是欺诈性的。如果我们只关注召回率,模型可能会被调整为将更多的交易标记为欺诈,以确保它不会错过那些真正的欺诈案例。例如,模型可能会将1,000个交易标记为欺诈,其中包括所有100个真正的欺诈案例和900个实际上是合法的交易。在这种情况下,召回率是100%,因为所有的欺诈交易都被正确地识别了。然而,这样做的代价是产生了很多假正类(False Positives)—那些被错误标记为欺诈的合法交易。这会导致很多不必要的麻烦,比如客户满意度下降和增加的客户服务成本。

       在混淆矩阵中,这表现为某一列中的T除以本列上左右数字的和,如下列表格,计算recall即红色字体的值除以红色和绿色字体的值的和,计算设计的数据包括正确分类的本类型样本的值和被错误分类至本类型的样本的值。

其公式为:

Recall=\frac{TP}{TP+FN}

3.4 F1-score

       正如上面所说的,当我们单独地使Precision值或者Recall值增高,都会使模型走向极端,因而我们引入了F1值,即Recall和Precision的调和平均数,,因为F1值综合考虑了Recall和Precision,因而其尤其适合在数据不平衡(不同类别的样本数据量差异很大)的情况时进行使用。当分数更高时,说明模型再识别少数类方面的能力更强,同时保持了较高的Recall和Precision平衡。其公式如下:

F1=2\times\frac{Precision\times Recall}{Percision+Recall}

       值得一提的是,这是在Recall和Precision的比重相同的同属情况下使用的,如果你认为其中某个值更加重要,你可以使用Fβ-score,其公式为:

F_\beta=(1+\beta^2)\cdot\frac{Precision\cdot Recall}{(\beta^2\cdot Precision)+Recall}

       其中的β是Recall和Precision的比值,当β大于1时,该分数会给予Recall更高的权重。

3.5 ROC曲线及AUC值

       在二分类的过程中,我们通常会设置一个阈值(取值为0到1之间),大于阈值的会被归于正类,小于阈值的会被归为负类,当我们降低阈值时,样本会更容易地被归为正类,但也会更容易出现假正类,反之则更容易出现遗漏的情况,而随着阈值的变化,混淆矩阵也会出现变化,为了直观地体现这种变化,我们引入了ROC曲线。

       在ROC曲线中,x和y轴分别为假阳性率(TPR)真阳性率(FPR),其中,假阳性率表示在所有阴性(即Negative)样本中,被错误地预测为阳性(即Positive)的比例,计算公式为:

FPR=\frac{FP}{FP+TN}

       而真阳性率又称召回率,表示所有实际阳性样本被正确预测为阳性的比例,计算公式为:

TPR=\frac{TP}{TP+FN}

       通过ROC曲线,我们可以明确地直观地看出模型的好坏,为了模型准确率更高,我们自然而然地希望真阳性率更高而假阳性率更低,因此,当曲线越靠近左上角,我们会认定这条曲线所代表的模型判断准确率更高,如下图所示

       这是通过KNN算法和决策树算法对sklearn库内置的乳腺癌库进行训练预测的ROC曲线结果图,如图所示,由于代表KNN算法的折线更靠近左上角,因而我们可以说在这个数据集上,使用了KNN算法的模型表现更好。

       而AUC(Area Under the Curve)值就是指曲线下的面积,当AUC值越接近1,可说明模型的分类性能更好。如下图涂黄的部分就是该曲线的AUC值。

3.6 PR曲线

       PR曲线,即精确率-召回率曲线,它是以召回率(Recall)为x轴,精确率(Precision)为y轴的曲线,在机器学习中,尤其在再不平衡数据集中非常有用。

       当我们在改变模型的分类阈值时,TP、FP和FN等都会发生变化,从而导致Recall和Precision发生变化,PR曲线展示了这种变化关系,可以帮助我们理解模型在不同阈值下的性能表现。通常来说,曲线越靠近右上方,代表模型的表现越好。

       其AUC值同样是一个重要的性能指标,反映了模型在所有可能的分类阈值上的平均效果,当AUC值越大表示模型性能越好。

       如下图所示的是KNN算法和决策树算法对sklearn库内置的乳腺癌库进行训练预测的PR曲线的结果图:

4. 代码实现

使用sklearn库中内置的算法和数据集进行实操,仅仅作为一个补充练习:

from sklearn.datasets import load_breast_cancer  # 导入乳腺癌数据集
from sklearn.model_selection import train_test_split  # 导入数据集分割工具
from sklearn.neighbors import KNeighborsClassifier  # 导入K近邻分类器
from sklearn.tree import DecisionTreeClassifier  # 导入决策树分类器
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score  # 导入性能评估工具
import matplotlib.pyplot as plt  # 导入绘图库

# 加载乳腺癌数据集
data = load_breast_cancer()
X = data.data  # 特征数据
y = data.target  # 标签数据

# 将数据集分割为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)  # 将训练集和测试集按8:2的比例拆分

# 初始化并训练K近邻分类器
knn_classifier = KNeighborsClassifier(n_neighbors=5)
knn_classifier.fit(X_train, y_train)

# 初始化并训练决策树分类器
tree_classifier = DecisionTreeClassifier(random_state=42)
tree_classifier.fit(X_train, y_train)

# 预测测试集的概率
y_scores_knn = knn_classifier.predict_proba(X_test)[:, 1]
y_scores_tree = tree_classifier.predict_proba(X_test)[:, 1]

# 计算KNN的ROC曲线和AUC值
fpr_knn, tpr_knn, _ = roc_curve(y_test, y_scores_knn)
roc_auc_knn = auc(fpr_knn, tpr_knn)

# 计算决策树的ROC曲线和AUC值
fpr_tree, tpr_tree, _ = roc_curve(y_test, y_scores_tree)
roc_auc_tree = auc(fpr_tree, tpr_tree)

# 计算KNN的精确度-召回率曲线和平均精确度
precision_knn, recall_knn, _ = precision_recall_curve(y_test, y_scores_knn)
average_precision_knn = average_precision_score(y_test, y_scores_knn)

# 计算决策树的精确度-召回率曲线和平均精确度
precision_tree, recall_tree, _ = precision_recall_curve(y_test, y_scores_tree)
average_precision_tree = average_precision_score(y_test, y_scores_tree)

# 绘制ROC曲线
plt.figure(figsize=(14, 6))

plt.subplot(1, 2, 1)
plt.plot(fpr_knn, tpr_knn, color='darkorange', lw=2, label='KNN (AUC = %0.2f)' % roc_auc_knn)
plt.plot(fpr_tree, tpr_tree, color='green', lw=2, label='Decision Tree (AUC = %0.2f)' % roc_auc_tree)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")

# 绘制精确度-召回率曲线
plt.subplot(1, 2, 2)
plt.plot(recall_knn, precision_knn, color='blue', lw=2, label='KNN (AP = %0.2f)' % average_precision_knn)
plt.plot(recall_tree, precision_tree, color='purple', lw=2, label='Decision Tree (AP = %0.2f)' % average_precision_tree)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('P-R Curve')
plt.legend(loc="lower left")

plt.tight_layout()
plt.show()

5. 总结 

如果想要学习更多深度学习知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

本篇文章转载自 机器学习——常见模型评估指标 - Dronnnnn - 博客园

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

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

相关文章

【STM32学习】TB6612FNG驱动芯片的学习,驱动电路的学习

目录 1、TB6612电机驱动芯片 1.1如下是芯片的引脚图: 1.2如下图是电机的控制逻辑: 1.3MOS管运转逻辑 1.3典型应用电路 2、H桥驱动电路 2.1、单极模式 2.2、双极模式 2.3、高低端MOS管导通条件 2.4、H桥电路设计 2.5、自举电路 3、电气特性 3…

STM32 HAL库开发学习3.STM32启动浅析

STM32 HAL库开发学习3.STM32启动浅析 一、STM32启动模式(也称自举模式)1. MSP与PC指针赋值2. F1系列的启动模式:3. F4系列启动模式4. F7系列启动模式5. H7系列启动模式 二、STM32启动过程1. MSP 栈顶地址2. PC值3. Reset_Handler4. 启动文件内…

FCBP 认证考试要点摘要

理论知识 数据处理与分析:包括数据的收集、清洗、转换、存储等基础操作,以及数据分析方法,如描述性统计分析、相关性分析、数据挖掘算法等的理解和应用 。数据可视化:涉及图表类型的选择与应用,如柱状图、折线图、饼图…

xv6前置知识

fork函数 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分…

ECharts柱状图-极坐标系下的堆叠柱状图,附视频讲解与代码下载

引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…

监控视频汇聚平台:Liveweb视频监控管理平台方案详细介绍

Liveweb国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发,提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能,包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、…

MySQL源码编译

华子目录 下载源码包上传并解压安装cmake环境检测make编译make install安装 部署复制编译文件到别的主机上 下载源码包 下载相应源码包mysql5.7编译安装需要boost库,这里官网下载含boost的源码包https://downloads.mysql.com/archives/community/ 上传并解压 [roo…

请求(request)

目录 前言 request概述 request的使用 获取前端传递的数据 实例 请求转发 特点 语法 实例 实例1 实例2 【关联实例1】 域对象 组成 作用范围: 生命周期: 使用场景: 使用步骤 存储数据对象 获得数据对象 移除域中的键值…

推荐学习笔记:矩阵补充和矩阵分解

参考: 召回 fun-rec/docs/ch02/ch2.1/ch2.1.1/mf.md at master datawhalechina/fun-rec GitHub 业务 隐语义模型与矩阵分解 协同过滤算法的特点: 协同过滤算法的特点就是完全没有利用到物品本身或者是用户自身的属性, 仅仅利用了用户与…

构造函数与析构函数错题汇总

构造函数不能定义返回类型,也没有返回类型。 堆、栈、静态存储区。栈上的对象main函数结束就释放,堆上的需要手动释放,静态存储区的在所在作用域的程序结束时释放。这里static在main函数内,是局部变量,所以作用域为…

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue大景区订票(购票)系统,分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…

fastdds:编译、安装并运行helloworld

fastdds安装可以参考官方文档: 3. Linux installation from sources — Fast DDS 3.1.0 documentation 从INSTALLATION MANUAL这一节可以看出来,fastdds支持的操作系统包括linux、windows、qnx、MAC OS。本文记录通过源码和cmake的方式来安装fastdds的…

HTTP 探秘之旅:从入门到未来

文章目录 导言:目录:第一篇:HTTP,互联网的“快递员”第二篇:从点开网页到看到内容,HTTP 究竟做了什么?第三篇:HTTP 的烦恼与进化史第四篇:HTTP 的铠甲——HTTPS 的故事第…

【软件项目测试文档大全】软件测试方案,验收测试计划,验收测试报告,测试用例,集成测试,测试规程和指南,等保测试(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.…

前端拿不到 response 响应流返回的 header 例如 Content-Disposition 等

同步发布于我的网站 🚀 背景介绍默认可访问的响应头问题分析解决方案 示例 前端代码示例注意事项总结 背景介绍 在进行前后端交互时,前端有时需要读取服务器返回的特定响应头(如 Content-Disposition),以便根据这些…

SQL进阶——C++与SQL进阶实践

在C开发中,SQL数据库的操作是开发者常见的任务之一。虽然前面我们已经介绍了如何在C中通过数据库连接执行基本的SQL查询,但在实际项目中,我们通常需要更加复杂和高效的数据库操作。存储过程与函数的调用、复杂SQL查询的编写、以及动态构造SQL…

论文概览 |《Urban Analytics and City Science》2023.05 Vol.50 Issue.4

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2023年5月第50卷第4期的论文的题目和摘要,一共包括19篇SCI论文! 论文1 Data analytics and sustainable urban development in global cities 全球城市的数据…

HarmonyOS4+NEXT星河版入门与项目实战(24)------Stage模型

文章目录 1、概念2、配置文件1、全局配置文件2、模块配置文件3、UIAbility生命周期1、图文归纳2、生命周期方法入口4、页面生命周期1、图文描述1、概念 2、配置文件 1、全局配置文件 2、模块配置文件 统一修改配置文件技巧:点击任意json 文件,选择 Open editor ,在显示的列表…

kubernetes——part3-2 集群声明式文件YAML

一、YAML介绍 YAML 的意思是:仍是一种标记语言,但为了强调这种语言以数据做为中心,而不是以标记语言为重点。是一个可读性高,用来表达数据序列的格式。 二、基本语法 1.低版本缩进时不允许使用Tab键,只允许使用空格…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一,同时也是企业最宝贵的资产之一。通常情况下,用户行为数据分析包含两大数据源:用户行为分析日志和上游关系型数据库(如 MySQL)。基于这些数据,企…