模型性能的主要指标

news2024/10/7 5:26:21

主要参数

ROC 曲线和混淆矩阵都是用来评估分类模型性能的工具

ROC曲线(Receiver Operating Characteristic curve)

  • ROC曲线描述了当阈值变化时,真正类率(True Positive Rate, TPR)和假正类率(False Positive Rate, FPR)之间的关系。
  • TPR(也称为灵敏度或召回率)是正实例中正确预测为正的比例。
  • FPR是负实例中错误预测为正的比例。
  • ROC曲线下的面积(AUC-ROC)可以量化分类器的整体性能,值介于0和1之间。一个完美的分类器的AUC-ROC为1,而随机猜测的AUC-ROC为0.5。
  • ROC曲线主要用于评估二元分类问题,但也可以扩展到多分类场景。

混淆矩阵(Confusion Matrix)

  • 混淆矩阵是一个表格,用于显示实际类别与预测类别之间的对应关系。
  • 对于二元分类问题,混淆矩阵有四个组成部分:真正(True Positive, TP),假正(False Positive, FP),真负(True Negative, TN)和假负(False Negative, FN)。
    • TP: 正确预测的正样本数。
    • FP: 错误预测的正样本数。
    • TN: 正确预测的负样本数。
    • FN: 错误预测的负样本数。
  • 除了基本的四个值,还可以计算其他的性能指标,如精确度、召回率、F1分数等。
  • 对于多分类问题,混淆矩阵将扩展为一个更大的方阵,其中每一行代表一个实际类别,每一列代表一个预测类别。

ROC曲线特别适用于比较不同模型或算法的性能,而混淆矩阵可以为我们提供更详细的分类结果信息。

代码实现

ROC曲线

ROC曲线是用于评估二元分类模型效果的工具。Scikit-learn提供了方便的工具来生成ROC曲线。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc
import torch

# 假设您已经得到了模型的预测概率和真实标签
# predictions: [N, 2]  N是样本数,2是类别数
# labels: [N]
predictions = torch.rand((100, 2))
labels = torch.randint(0, 2, (100,))

# 获取正类的预测概率
probs = predictions[:, 1]

# 计算ROC
fpr, tpr, thresholds = roc_curve(labels, probs)

roc_auc = auc(fpr, tpr)

# 绘图
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, 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('Receiver Operating Characteristic (ROC)')
plt.legend(loc="lower right")
plt.show()

 

混淆矩阵

混淆矩阵是一个简单的工具,它可以显示真实标签和预测标签之间的对应关系。

from sklearn.metrics import confusion_matrix
import seaborn as sns

# 根据概率获取预测的标签
_, predicted_labels = predictions.max(1)

cm = confusion_matrix(labels, predicted_labels)

# 绘图
plt.figure(figsize=(5,5))
sns.heatmap(cm, annot=True, fmt=".0f", linewidths=.5, square = True, cmap = 'Blues_r');
plt.ylabel('Actual label');
plt.xlabel('Predicted label');
plt.title('Confusion Matrix');
plt.show()

 

注意:需要先安装matplotlib, seabornscikit-learn。可以使用pip来安装这些库。

 补充:其他性能指标

了ROC曲线和混淆矩阵外,分类模型常用的性能指标还有准确率、精确度、召回率、F1分数等。这些指标都可以基于混淆矩阵的四个基本值(TP, FP, TN, FN)来计算。以下是这些指标的定义和如何使用Python代码实现它们:

准确率(Accuracy):所有预测正确的样本与总样本的比例。

def accuracy(TP, FP, FN, TN):
    return (TP + TN) / (TP + FP + FN + TN)

精确度(Precision):正确预测为正的样本与所有预测为正的样本的比例。 

def precision(TP, FP):
    return TP / (TP + FP)

 召回率(Recall)或灵敏度(Sensitivity):正确预测为正的样本与所有实际为正的样本的比例。

def recall(TP, FN):
    return TP / (TP + FN)

 F1分数(F1 Score):精确度和召回率的调和平均值。

def f1_score(precision_value, recall_value):
    return 2 * (precision_value * recall_value) / (precision_value + recall_value)

 注意,上述公式和代码片段是为二元分类设计的。多分类问题需要稍作调整或使用micro、macro等不同的计算方式。

此外,我们可以直接调用scikit-learn库为我们提供了方便的函数来计算这些指标:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

y_true = [1, 0, 1, 1, 0, 1]
y_pred = [1, 0, 1, 0, 0, 1]

print("Accuracy:", accuracy_score(y_true, y_pred))
print("Precision:", precision_score(y_true, y_pred))
print("Recall:", recall_score(y_true, y_pred))
print("F1 Score:", f1_score(y_true, y_pred))

“IOU”是Intersection over Union的缩写,它是一种测量对象检测算法预测边界框与实际边界框之间重叠程度的指标。IOU常用于计算目标检测和语义分割任务的准确性。

IOU定义为两个边界框交集的面积与它们并集的面积之比:

“mAP曲线”是基于不同IOU阈值的平均精确度。如果计算IoU并将其用于评估,以下是一个简单的Python代码示例,演示如何计算两个矩形的IoU:

 

def bb_intersection_over_union(boxA, boxB):
    # 确定交集矩形的(x, y)坐标
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[2], boxB[2])
    yB = min(boxA[3], boxB[3])

    # 计算交集矩形的面积
    interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)

    # 计算预测矩形和实际矩形的面积
    boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1)
    boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1)

    # 通过取交集面积并除以预测和实际矩形的面积之和(减去交集面积)来计算并集
    iou = interArea / float(boxAArea + boxBArea - interArea)

    # 返回并集值
    return iou

# 使用示例:
boxA = [10, 10, 50, 50]  # 格式: [x1, y1, x2, y2]
boxB = [20, 20, 60, 60]
print(bb_intersection_over_union(boxA, boxB)) # 应该打印一个0到1之间的值

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

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

相关文章

SAP 收藏夹Favorites介绍,收藏夹导入/导出功能

作为SAP用户,经常需要使用一些事务代码T-Code, 很多时候会因为不常用其中的一些遗忘这个功能,所以这时候分类收藏好不同Module的事务代码到收藏夹里是一个不错的选择。 经常面临的一个场景就是需要变换系统环境,比如从Client A01,去到Client…

springcloud 基础

SprinbCloud微服务简介 架构发展历史 SpringBoot由baiPivotal团队在2013年开始研发、2014年4月发布第一个du版本的全新开源的轻量级框架。 它基zhi于Spring4.0设计,不dao仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用…

QIIME 2教程. 11元数据Metadata(2023.5)

QIIME 2用户文档. 11元数据 Metadata in QIIME 2 https://docs.qiime2.org/2023.5/tutorials/metadata/ 注:此实例需要一些基础知识,要求完成本系列文章前两篇内容:《1简介和安装Introduction&Install》和4《人体各部位微生物组分析Movin…

【硬件突击 电路】

文章目录 1. 电阻(Resistor):2. 电容(Capacitor):3. 电感:4、 RC、RL、RLC电路结构及工作原理基尔霍夫定律基尔霍夫电流定律(KCL)基尔霍夫电压定律(KVL&#…

【舌尖优省PLUS】美团、饿了么外卖免费领红包,尽情享受美食与省钱!

家人们!我昨天刚开发完并上线了一个超棒的外卖免费领红包的小程序,它叫做【舌尖优省PLUS】!如果你喜欢美食,还想省下一些钱,那这个小程序绝对不能错过! 在【舌尖优省PLUS】上,你可以通过简单的…

react 生命周期方法

组件的生命周期 每个组件都包含 “生命周期方法”,你可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法。你可以使用此生命周期图谱作为速查表。在下述列表中,常用的生命周期方法会被加粗。其余生命周期函数的使用则相对罕见。 挂…

第4章:决策树

停止 当前分支样本均为同一类时,变成该类的叶子节点。当前分支类型不同,但是已经没有可以用来分裂的属性时,变成类别样本更多的那个类别的叶子节点。当前分支为空时,变成父节点类别最多的类的叶子节点。 ID3 C4.5 Cart 过拟合 缺…

springcloud3 sleuth实现链路状态监控

一 slueth的介绍 1.1 slueth的作用 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个阶段请求都会形成一条复杂的分布式调用链路,链路中任何一环出现高延时或者错误都会引起…

通讯协议038——全网独有的OPC HDA知识一之聚合(七)最小值

本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

MySQL环境安装

文章目录 MySQL环境安装1. 卸载1.1 卸载不要的环境1.2 检查卸载系统安装包 2. 安装2.1 获取mysql官方yum源2.2 安装mysql的yum源2.3 安装mysql服务 3. 登录(1)(2)(3) 4. 配置my.cnf MySQL环境安装 说明: 安装与卸载中,用户全部切换成为root&#xff0c…

基于YOLOv8+PyQt5开发的行人过马路危险行为检测告警系统(附数据集和源码下载)

系列文章目录 文章目录 系列文章目录前言欢迎来到我的博客!我很高兴能与大家分享关于基于YOLOv8的行人过马路危险行为检测告警系统的内容。 一、系统特点1. 采用最新最优秀的目标检测算法YOLOv82. 系统分别基于PyQt5开发了两种GUI图形界面,供大家学习使用…

ruoyi-vue-pro yudao 项目bpm模块启用及相关SQL脚本

目前ruoyi-vue-pro 项目虽然开源,但是bpm模块被屏蔽了,查看文档却要收费 199元(知识星球),价格有点太高了吧。 分享下如何启用 bpm 模块,顺便贴上sql相关脚本。 一、启用模块 修改根目录 pom.xml 启用模…

Day 29 C++ STL- 函数对象(Function Object)(仿函数)

文章目录 函数对象概念概念本质 函数对象使用特点示例 谓词——返回bool类型的仿函数谓词概念一元谓词——operator()参数只有一个的谓词二元谓词——operator()参数只有俩个的谓词 内建函数对象(Builtin Function Objects)内建函数对象概念注意算术仿函…

Flowable-边界事件-补偿边界事件

目录 定义图形标记XML内容使用示例演示demo 定义 补偿边界事件可以为所依附的节点附加补偿处理器,通过关联连接到补偿处理器(compensation handler)。补偿边界事件会在流程活动完成后根据情况(事务取消或者补偿中间事件触发&…

WAVE SUMMIT2023六大分会场同步开启,飞桨+文心大模型加速区域产业智能化!

由深度学习技术及应用国家工程研究中心主办、百度飞桨和文心大模型承办的WAVE SUMMIT深度学习开发者大会2023将于8月16日重磅来袭!届时上海、广州、深圳、成都、南昌和宁波六大分会场将同步开启! 分会汇聚区域产业大咖、科研机构专家、知名学者和技术大牛…

股票量化分析工具QTYX使用攻略——盘口异动实时监测(更新2.6.8)

QTYX简介‍‍‍ 股票量化交易系统QTYX是一个即可以用于学习,也可以用于实战炒股分析的系统。 分享QTYX系统目的是提供给大家一个搭建量化系统的模版,最终帮助大家搭建属于自己的系统。因此我们提供源码,可以根据自己的风格二次开发。 关于QTY…

研究机构:PayPal稳定币PYUSD有望成为「数字资产」的重要用例

作者:Greg Cipolaro,NYDIG 全球研究主管 编译:WEEX 唯客 本文主要探讨两个话题:1. 过去两周,Crypto ETF 的申请数量激增,它们的审核流程是怎样的?2. 金融科技巨头 PayPal 已推出自己的稳定币 PY…

零代码编程:用ChatGPT对Excel文件批量重命名

文件夹下面有几百个Excel文件,希望去掉开头的“【企查查】专利-”,去掉结尾的电话,然后在后面统一加上“发明专利列表”这几个字。 可以在ChatGPT中这样输入提示词: 你是一个Python编程专家,要完成一个文件标题重命名…

UnrealEngine - 网络同步之连接篇

1 连接过程 - 握手 传统的 C/S 架构下,Client 和 Server 通常会建立一条抽象的 Connection,用来进行两端的通信。 UE 的官方文档中提供了 Client 连接到 Server 的示例 ,简单来说分为如下几步: 打包构建好 Client 和 Server 进程…

windows server 2016 搭建使用 svn 服务器教程

参考教程: https://zhuanlan.zhihu.com/p/428552058 https://blog.csdn.net/weixin_33897722/article/details/85602029 配置环境 windows server 2016 远程服务器公网 ip 安装 SVN 服务端 下载 svn 服务端安装包:https://www.visualsvn.com/download…