当前位置: 首页 > news >正文

CNN卷积神经网络之模型评估指标(二)

CNN卷积神经网络之模型评估指标(二)


文章目录

  • CNN卷积神经网络之模型评估指标(二)
    • 1. 模型评估指标的四个最基础的名词:TP、TN、FP、FN
    • 2. 常用指标速查表(含公式 & 代码)
    • 3. 一行代码算所有指标(多分类示例)
    • 4. 把结果画成混淆矩阵
    • 5. 二分类专属 ROC 曲线 & AUC
    • 6. 一张图记住指标关系
    • 7. 小结 & 使用建议


本文从零开始讲解分类任务常用的评估指标,所有示例数据均在代码中现场生成,复制即可运行,无需任何外部文件。


1. 模型评估指标的四个最基础的名词:TP、TN、FP、FN

做二分类(例如“是不是垃圾邮件”)时,模型对每一封邮件只有两种预测结果:垃圾正常。把预测结果和真实标签一对比,就得到 4 种情况:

真正例(True Positive, TP)
定义 :模型正确地预测为正类的样本数量。
通俗解释 :假设你有一个垃圾邮件分类器,它会把邮件标记为垃圾邮件或非垃圾邮件。真正例就是那些被正确标记为垃圾邮件的邮件数量。
例子 :
你有 100 封邮件。
其中 30 封是垃圾邮件。
模型正确地将 25 封垃圾邮件标记为垃圾邮件。
那么 TP = 25。

真负例(True Negative, TN)
定义 :模型正确地预测为负类的样本数量。
通俗解释 :假设你有一个垃圾邮件分类器,它会把邮件标记为垃圾邮件或非垃圾邮件。真负例就是那些被正确标记为非垃圾邮件的邮件数量。
例子 :
你有 100 封邮件。
其中 70 封是非垃圾邮件。
模型正确地将 60 封非垃圾邮件标记为非垃圾邮件。
那么 TN = 60。

假正例(False Positive, FP)
定义 :模型错误地预测为正类的样本数量。
通俗解释 :假设你有一个垃圾邮件分类器,它会把邮件标记为垃圾邮件或非垃圾邮件。假正例就是那些被错误地标记为垃圾邮件的非垃圾邮件数量。
例子 :
你有 100 封邮件。
其中 70 封是非垃圾邮件。
模型错误地将 10 封非垃圾邮件标记为垃圾邮件。
那么 FP = 10。

假负例(False Negative, FN)
定义 :模型错误地预测为负类的样本数量。
通俗解释 :假设你有一个垃圾邮件分类器,它会把邮件标记为垃圾邮件或非垃圾邮件。假负例就是那些被错误地标记为非垃圾邮件的垃圾邮件数量。
例子 :
你有 100 封邮件。
其中 30 封是垃圾邮件。
模型错误地将 5 封垃圾邮件标记为非垃圾邮件。
那么 FN = 5。

缩写全称中文解释垃圾邮件例子(共 100 封:30 垃圾 / 70 正常)
TPTrue Positive真正例:真实是垃圾,也预测成垃圾25 封
TNTrue Negative真负例:真实是正常,也预测成正常60 封
FPFalse Positive假正例:真实是正常,却被误判成垃圾10 封
FNFalse Negative假负例:真实是垃圾,却被漏判成正常5 封

2. 常用指标速查表(含公式 & 代码)

指标公式关注点适用场景
Accuracy
准确率
TP+TNTP+TN+FP+FN\frac{TP+TN}{TP+TN+FP+FN} TP+TN+FP+FNTP+TN整体猜对的比率类别分布均衡
Precision
精确率
TPTP+FP\frac{TP}{TP+FP} TP+FPTP“预测为垃圾的”里多少真的是垃圾宁可漏掉,也别误杀
Recall
召回率
TPTP+FN\frac{TP}{TP+FN} TP+FNTP“所有垃圾”里多少被成功找到宁可误杀,也别漏掉
F1-Score2⋅P⋅RP+R2\cdot\frac{P\cdot R}{P+R} 2P+RPRPrecision 与 Recall 的调和平均两者都要兼顾

3. 一行代码算所有指标(多分类示例)

下面用 sklearn 现场造一份 3 分类数据并计算上述指标,你复制即可跑:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt# 1. 现场生成 3 分类数据集(无需外部文件)
X, y = make_classification(n_samples=1000, n_classes=3,n_informative=4, n_redundant=0,random_state=42)# 2. 训练 / 预测
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
clf = LogisticRegression(max_iter=1000).fit(X_train, y_train)
y_pred = clf.predict(X_test)# 3. 输出指标
print('Accuracy :', accuracy_score(y_test, y_pred))
print('Precision:', precision_score(y_test, y_pred, average='macro'))
print('Recall   :', recall_score(y_test, y_pred, average='macro'))
print('F1-Score :', f1_score(y_test, y_pred, average='macro'))

4. 把结果画成混淆矩阵

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix# 1. 生成 3 分类数据集(1000 个样本,20 个特征)
X, y = make_classification(n_samples=1000,n_features=20,n_classes=3,n_informative=6,n_redundant=0,random_state=42
)# 2. 训练 / 测试划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y
)# 3. 训练模型
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)# 4. 预测
y_pred = clf.predict(X_test)# 5. 计算并可视化混淆矩阵
cm = confusion_matrix(y_test, y_pred)plt.figure(figsize=(5, 4))
sns.heatmap(cm,annot=True,fmt='d',cmap='Blues',xticklabels=['Class 0', 'Class 1', 'Class 2'],yticklabels=['Class 0', 'Class 1', 'Class 2']
)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.tight_layout()
plt.show()
  • 运行示例:
    在这里插入图片描述

5. 二分类专属 ROC 曲线 & AUC

当任务只有 2 个类别时,可进一步画 ROC 曲线,看模型在不同阈值下的表现。

# ============================================
# 5. 完整版:二分类 ROC 曲线 & AUC
# ============================================
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score# 1. 生成二分类数据集(800 个样本,20 个特征)
X, y = make_classification(n_samples=800,n_features=20,n_classes=2,n_informative=2,n_redundant=10,random_state=1
)# 2. 训练 / 测试划分(分层抽样,保证正负比例一致)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y
)# 3. 训练模型
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)# 4. 预测正类概率
y_scores = clf.predict_proba(X_test)[:, 1]# 5. 计算 ROC 曲线 & AUC
fpr, tpr, thresholds = roc_curve(y_test, y_scores)
auc = roc_auc_score(y_test, y_scores)# 6. 绘制 ROC 曲线
plt.figure(figsize=(5, 4))
plt.plot(fpr, tpr, color='darkorange', lw=2,label=f'ROC curve (AUC = {auc:.3f})')
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 (ROC)')
plt.legend(loc='lower right')
plt.tight_layout()
plt.show()
  • 运行示例:
    在这里插入图片描述

6. 一张图记住指标关系

            真实垃圾   真实正常
预测垃圾      TP         FP
预测正常      FN         TN
  • Precision = TP / (TP + FP) —— 竖着看
  • Recall = TP / (TP + FN) —— 横着看

7. 小结 & 使用建议

场景推荐先看
类别均衡、成本对称Accuracy
类别不均衡F1-Score 或 AUC
漏检代价高(疾病筛查)Recall
误检代价高(垃圾邮件)Precision
想整体看犯错分布Confusion Matrix
http://www.lryc.cn/news/603228.html

相关文章:

  • 嵌入式系统分层开发:架构模式与工程实践(一)
  • HammerDB:一款免费开源的数据库基准测试工具
  • 【学习笔记】Lean4 定理证明 ing
  • C++ 模板类型 <T>,对函数参数传递兼容性检查
  • [MySQL] MySQL 版本不支持 ST_Distance_Sphere替代方案和解决方案
  • 数据结构【红黑树】
  • Charles中文版使用指南:如何利用抓包工具优化API调试与网络性能
  • Redis+JWT 认证管理最佳实践
  • TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例
  • Ext JS极速项目之 Coworkee
  • 随缘玩 一: 代理模式
  • 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
  • 【图像处理基石】如何对遥感图像进行实例分割?
  • 小白学OpenCV系列1-图像处理基本操作
  • 在 Web3 时代通过自我主权合规重塑 KYC/AML
  • [SWPU2019]Web1
  • 链表反转中最常用的方法————三指针法
  • PHP云原生架构:容器化、Kubernetes与Serverless实践
  • redis【1】
  • 小程序视频播放,与父视图一致等样式设置
  • zama test
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • 数据结构之时间复杂度
  • 前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局
  • ZKmall开源商城中台架构实践:API 网关与服务治理如何撑起电商技术骨架
  • 在 PolkaVM 上用 Rust 实现 ERC20 合约的全流程开发指南
  • 接口自动化测试pytest框架
  • c++-list
  • 【VOS虚拟操作系统】未来之窗打包工具在前端资源优化中的应用与优势分析——仙盟创梦IDE