1.分类模型评价指标

在模型评估中,有多个标准用于衡量模型的性能,这些标准包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 分数(F1-Score)等。

P positive;N  Negative

真正例(TP) :模型正确预测为正类的样本数量。

它真实标签是什么,预测值就是什么这就是TP

真负例(TN) :模型正确预测为负类的样本数量。

真实标签和预测标签不一样

假正例(FP) :模型错误预测为正类的样本数量。

比如预测标签是0,真实标签不是0,那么就是一个FP0

假负例(FN) :模型错误预测为负类的样本数量。

FN = 该类别真实样本数 - 正确预测数(TP)

比如真实标签0有3个  预测里面正确预测到了俩个 那么FN = 1

1. 理解数据

  • 真实标签y_true = [2, 0, 2, 2, 0, 1]

  • 预测标签y_pred = [0, 0, 2, 2, 0, 2]

2. 构建混淆矩阵

首先计算混淆矩阵(按类别0、1、2排列):

真实\预测012
0200
1001
2102
  • 类别0:真实为0的样本(索引1和4)

    • 预测结果:两个都被正确预测为0 → TP=2

    • 其他类别预测为0的样本:真实为2的样本(索引0)被预测为0 → FP=1

    • Precision₀ = TP / (TP + FP) = 2 / (2 + 1) = 2/3

  • 类别1:真实为1的样本(索引5)

    • 预测结果:真实为1被预测为2 → TP=0

    • 其他类别预测为1的样本:无 → FP=0

    • Precision₁ = 0 / (0 + 0) = 0(sklearn将分母为0时定义为0)

  • 类别2:真实为2的样本(索引0、2、3)

    • 预测结果:索引2和3正确预测为2 → TP=2

    • 其他类别预测为2的样本:真实为1(索引5)被预测为2 → FP=1

    • Precision₂ = 2 / (2 + 1) = 2/3

计算每个类别的FN

FN是行方向的误差(真实类别被漏判的数量)。对每个类别:

text

FN = 该类别真实样本数 - 正确预测数(TP)
1. 类别 0
  • 真实样本数:2个(索引1和4)

  • 正确预测数(TP):2个(都被预测为0)

  • FN₀ = 2 - 2 = 0

2. 类别 1
  • 真实样本数:1个(索引5)

  • 正确预测数(TP):0个(未被预测为1)

  • FN₁ = 1 - 0 = 1
    (真实为1的样本被错误预测为2)

3. 类别 2
  • 真实样本数:3个(索引0、2、3)

  • 正确预测数(TP):2个(索引2和3被正确预测为2)

  • FN₂ = 3 - 2 = 1
    (真实为2的样本被错误预测为0)

2.准确率

准确率(Accuracy)准确率是最直观的评估指标,它表示模型预测正确的样本占总样本的比例。计算公式为:

from sklearn.metrics import confusion_matrix,accuracy_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])# 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print("准确率:", accuracy)

 

 

3.精确率(Precision)

精确率衡量模型预测为正类的实例中,实际为正类的比例。计算公式为:

 

对应多分类问题,采样宏平均精确率是每个类别的精确率的平均值,不考虑每个类别的样本数量。计算公式如下:

 

 

from sklearn.metrics import confusion_matrix,accuracy_score,precision_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])# 计算精确率
precision = precision_score(y_true, y_pred, average='macro')
print("精确率:", precision)

4.召回率(Recall)

召回率衡量所有实际为正类的样本中,模型预测为正类的比例。计算公式为:

召回率关注的是模型捕捉正类样本的能力。在某些领域,如医疗诊断,召回率尤其重要,因为漏诊(假负例)的后果可能非常严重。

 

from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])# 计算召回率
recall = recall_score(y_true, y_pred, average='macro')
print("召回率:", recall)

 

5.F1 分数(F1-Score)

F1分数是精确率和召回率的调和平均值,它平衡了这两个指标。计算公式为:

F1分数在精确率和召回率都较高的算法上表现出色。它是一个综合指标,特别适用于那些对精确率和召回率都同样重视的场景。

from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score,f1_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns# 假设我们有以下真实标签和预测结果
y_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])# 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print("准确率:", accuracy)# 计算精确率
precision = precision_score(y_true, y_pred, average='macro')
print("精确率:", precision)# 计算召回率
recall = recall_score(y_true, y_pred, average='macro')
print("召回率:", recall)# 计算F1分数
f1 = f1_score(y_true, y_pred, average='macro')
print("F1分数:", f1)

6.混淆矩阵

混淆矩阵是评估分类问题的基础工具,它是一个表格,显示了分类算法的预测结果与真实标签之间的关系。对于二分类问题,混淆矩阵包含真正例(TP)、真负例(TN)、假正例(FP)和假负例(FN)。这些值是计算其他评估指标的基础。混淆矩阵不仅提供了一个直观的视觉表示,还允许我们深入了解模型在各个类别上的表现,特别是当处理不平衡数据集时,混淆矩阵可以揭示模型是否倾向于错误地将一个类别分类为另一个类别。

from sklearn.metrics import confusion_matrix,accuracy_score,precision_score,recall_score,f1_score
import numpy as np
import matplotlib.pyplot as plt
import seaborn as snsy_true = np.array([2, 0, 2, 2, 0, 1])
y_pred = np.array([0, 0, 2, 2, 0, 2])cm = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(10,7))
sns.heatmap(cm, annot=True,fmt = "d",cmap = "Blues")
plt.xlabel('Predicted')
plt.ylabel('Truth')
plt.show()

 

7.ROC曲线和AUC值

ROC曲线是一个性能度量,显示了在不同阈值设置下模型的真正例率(召回率)和假正例率的关系。AUC值表示ROC曲线下的面积,用于衡量模型的整体性能,AUC值越高,模型性能越好。ROC曲线和AUC值是评估模型区分不同类别能力的重要工具,尤其在二分类问题中非常实用

from sklearn.metrics import roc_curve,roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import numpy as np
import matplotlib.pyplot as pltX = np.array([[0,0],[1,1],[2,0],[2,2],[0,1]])
y = np.array([1,1,0,1,0])plt.scatter(X[y==0,0],X[y==0,1],color = "red",label = "Class 0")
plt.scatter(X[y==1,0],X[y==1,1],color = "blue",label = "Class 1")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.legend()
plt.title("Data Points by Class")
plt.grid(True)
plt.show()x_train,x_test,y_train,y_test = train_test_split(X,y,test_size = 0.4,random_state = 42)
print("------训练样本------")
print(x_train,y_train)
print("------测试样本------")
print(x_test,y_test)clf = RandomForestClassifier(n_estimators = 100,max_depth = 2,random_state = 42)
clf.fit(x_train,y_train)y_scores = clf.predict_proba(x_test)[:,1]
fpr,tpr,thresholds = roc_curve(y_test,y_scores)
auc = roc_auc_score(y_test,y_scores)plt.figure()
plt.plot(fpr,tpr,color = "darkorange",lw = 2,label = "ROC curve (area = %0.2f)" % auc)
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('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

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

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

相关文章

Python爬虫实战:诗词名句网《三国演义》全集

Beautiful Soup实战案例:爬取"诗词名句网" 目标 爬取"诗词名句网"上的古典文学作品内容,包括书籍目录和章节内容,并将每章内容独立保存为文本文件。 目标网址: 《三国演义》全集在线阅读_史书典籍_诗词名句网 要求 书…

AWS CAF:企业云转型的战略指南

在数字化转型的大潮中,企业正面临前所未有的变革压力。如何利用云计算驱动业务创新、提升IT敏捷性、优化成本结构,已成为众多企业迫切需要解决的关键课题。然而,云迁移并不是简单地将本地应用“复制”到云上,它是一项牵涉企业组织…

【Redis】Linux 配置Redis

一、Redis介绍 Redis(Remote Dictionary Server)是一款开源的、高性能的键值对(Key-Value)存储数据库,由 Salvatore Sanfilippo 于 2009 年开发,采用 ANSI C 语言编写。它以内存存储为核心,支持…

MongoDB数据库高并发商业实践优化·运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡

MongoDB数据库高并发商业实践优化运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡 引言 关于最近优雅草卓伊凡发布关于MongoDB的内容是由于我们的甲方上线了一个很老的产品,但是他的用户量极大,并且还有各种人搞事情,不断的来GJ&a…

戴尔电脑 Linux 安装与配置指南_导入mysql共享文件夹

本指南将详细介绍在戴尔电脑上安装 Linux 操作系统的步骤,以及后续的重要配置,包括系统选择、安装流程、MySQL 数据恢复、网络配置、文件共享和远程维护等。步骤清晰且配有命令行示例和配置文件示例,适合初中级用户参考。1、Linux 系统选择与…

昇思学习营-DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调学习心得

LoRA微调:加入参数式微调冻结原始网络参数,对Attention层中QKV等添加旁支,包含两个低维度的矩阵A和矩阵B,微调过程中仅更新A、B 矩阵效果:训练参数被大幅降低,资源消耗较低。对attention的参数加入如下图所…

彩色转灰度的核心逻辑:三种经典方法及原理对比

灰度实验将彩色图像转换为灰度图像的过程称为灰度化,这种做法在图像处理和计算机视觉领域非常常见。灰度图与彩色图最大的不同就是:彩色图是由R、G、B三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转…

Spring Boot 项目启动自动执行逻辑的最佳实践:掌握 CommandLineRunner

前言 Spring Boot 启动阶段,总有些操作迫不及待冲在前线:配置要加载,数据要准备,日志要抢首发,仿佛个个争当“启动 MVP”。如果你也想让项目一启动就自动开工,少写点手动触发的“苦力逻辑”,那 CommandLineRunner 就是你的得力助手。它像那个永远第一个打卡的同事,不喝…

高可用集群KEEPALIVED的详细部署

一.高可用集群 1.1 集群类型 LB:Load Balance 负载均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream) HA:High Availability 高可用集群 数据库、Redis SPoF: Single Point of Failure,解决单点故障 HPC&#x…

[论文阅读] 人工智能 + 软件工程 | NoCode-bench:评估LLM无代码功能添加能力的新基准

NoCode-bench:评估LLM无代码功能添加能力的新基准 论文:NoCode-bench: A Benchmark for Evaluating Natural Language-Driven Feature Addition 研究背景:当AI尝试给软件"加新功能",我们需要一张靠谱的"考卷"…

【Git知识】Git 常用知识集合之基础--分支系统与 Tag 标签机制

🧰 Git 常用知识集合Git 是程序员的“时间机器”。这份手册帮你从入门到精通,把 Git 玩明白。1️⃣ Git 基础操作流程 📌 三步走流程:添加 → 提交 → 推送 git add . # 把所有修改加入暂存区 git commit -m …

深入解析 Spark:关键问题与答案汇总

在大数据处理领域,Spark 凭借其高效的计算能力和丰富的功能,成为了众多开发者和企业的首选框架。然而,在使用 Spark 的过程中,我们会遇到各种各样的问题,从性能优化到算子使用等。本文将围绕 Spark 的一些核心问题进行…

Python-初学openCV——对openCV的简单使用

一、概述1、简单介绍OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,旨在为实时图像处理提供强大的功能。它由Intel开发,现由开源社区维护。OpenCV 提供了跨平台的解决方案,支持 Windows、Linu…

去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新

文章目录前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址前言 数字协作本该是提升效率的过程,却被这些数据管理问题不断困扰:平台条款中的监控声明、跨网络环境的接入障碍、…

GitHub新手生存指南:AI项目版本控制与协作实战

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 代码仓库创建 分支管理 PR提交 开源项目复现 读者收获:掌握团队开发必备技能…

Axios封装以及添加拦截器

在前端开发中,http请求层的封装可以极大提升代码的复用性和可维护性,本文将完整的用axios封装接口请求,配置请求与响应拦截器,封装统一的请求方法全过程。封装的目的和思路在项目直接用axios发送请求当然没问题,但是如…

C语言中奇技淫巧04-仅对指定函数启用编译优化

相信很多人使用GCC编译代码时,都会接触到gcc -O0/1/2/3/s,知道它可以对工程进行全局优化。 事实上,除了全局优化外,使用GCC扩展方式,我们还可以仅对部分关键函数实施差异化编译优化。 在GCC编译器中,attrib…

HTML Style 对象深度解析:从基础到高级应用

一、Style 对象的核心概念定义与作用 Style 对象是 HTML DOM 中用于操作元素内联样式的接口,通过 element.style 访问。它允许动态修改元素的 CSS 属性,但仅能直接影响内联样式(即通过 style 属性直接写在标签中的样式)。与外部样…

【C++】定义常量

在 C 中&#xff0c;有两种简单的定义常量的方式&#xff1a; 使用 #define 预处理器。使用 const 关键字。 #define 预处理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遗传算法的多无人车协同侦察与安全保护策略优化

基于遗传算法的多无人车协同侦察与安全保护策略优化 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 1.1 研究背景与意义 随着无人系统技术的快速发…