机器学习:混淆矩阵、准确率、错误率、灵敏度、特异度、精准率、召回率、F-Measure、ROC曲线 & PR曲线

机器学习:混淆矩阵、准确率、错误率、灵敏度、特异度、精准率、召回率、F-Measure、ROC曲线 & PR曲线从 FPR 和 TPR 的定义可以理解 TPR 越高 FPR 越小 我们的模型和算法就越高效 比如 把蓝色虚线放到第一张图片下面 也就是说让系统只识别出最上面的那张飞机图片 那么 Precision 的值就是 100 而 Recall 的值则是 20 如果把蓝色虚线放到第二张图片下面 也就是说让系统只识别出最上面的前两张图片 那么 Precision 的值还是 100 而 Recall 的值则增长到是 40 灵敏度 Sensitive 表示的是所有正例中被分对的比例 衡量了分类器对正例的识别能力 在数值上等于召回率 Recall

概念

混淆矩阵(Confusion-Matrix)

符号 含义
TP(True Positives) 【真正】样本为正,预测结果为正
FP(False Positives) 【假正】样本为负,预测结果为正
TN(True Negatives) 【真负】样本为负,预测结果为负
FN(False Negatives) 【假负】样本为正,预测结果为负

具体来说:

正确的、相关的(wanted) 不正确的、不相关的
检测出来的 TP(True Positives) FP(False Positives)
未检测出来的 TN(True Negatives) FN(False Negatives)
  • 准确率
    A c c u r a c y = T P + T N T P + F P + T N + F N Accuracy=\frac{TP+TN}{TP+FP+TN+FN} Accuracy=TP+FP+TN+FNTP+TN
  • 错误率(错误率与准确率相反,对某一个实例来说,二者互斥)
    E r r o r r a t e = F P + F N T P + F P + T N + F N = 1 − A c c u r a c y Error rate=\frac{FP+FN}{TP+FP+TN+FN}=1-Accuracy Errorrate=TP+FP+TN+FNFP+FN=1Accuracy
  • 灵敏度(Sensitive 表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力,在数值上等于召回率Recall)
    T P R = T P T P + F N TPR =\frac{TP}{TP+FN} TPR=TP+FNTP
  • 特异度(Specificity 表示的是将负例识别为负例的情况占所有负例的比例,衡量了分类器对负例的识别能力)
    T N R = T N T N + F P TNR =\frac{TN}{TN+FP} TNR=TN+FPTN
  • 精准率(Precision其实就是在识别出来的图片中,True positives所占的比率:)
    P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
  • 召回率(Recall 召回率是覆盖面的度量,可以看做是被正确识别出来的样本个数与测试集中所有要识别样本个数的比值)
    R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
  • 综合评价指标:F-measure
    P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)
    F-Measure是Precision和Recall加权调和平均:
    F = ( α 2 + 1 ) P ∗ R α 2 P + R F=\frac{(\alpha^2+1)P*R}{\alpha^2P+R} F=α2P+R(α2+1)PR
    当参数 α = 1 \alpha =1 α=1时,就是最常见的F1:precision和recall调和均值的2倍,即
    F 1 = 2 ∗ P ∗ R P + R F1=\frac{2*P*R}{P+R} F1=P+R2PR




Recall召回率 实际等同于 查全率
Precision精准率 实际等同于 查准率

Two Examples

下面举两个例子来帮助理解:

Example 1

T F
P 3 3
N 2 2
Recall = TP/(TP+FN)=3/5 = 0.6
Precise = TP/(TP+FP)=3/6=0.5
查准率为:3/6 = 0.5(返回的6个结果只有3个正确)
查全率为: 3/5 = 0.6 (所有女生有5个,但只找到3个)

Example 2

此例子来自:https://blog.csdn.net/hysteric314/article/details/

  • 大雁与飞机
    假设现在有这样一个测试集,测试集中的图片只由大雁和飞机两种图片组成,如下图所示:
    1.png-74.3kB

假设你的分类系统最终的目的是:能取出测试集中所有飞机的图片,而不是大雁的图片

归纳一下就是:

T F
P 3 1
N 4 2
  • 调整阈值
    我们通过调整阈值,来选择让系统识别出多少图片,进而改变Precision 或 Recall 的值。
    在某种阈值的前提下(蓝色虚线),系统识别出了四张图片,如下图中所示:
    20170105154012966.png-97.6kB


分类系统认为大于阈值(蓝色虚线之上)的四个图片更像飞机。

我们可以通过改变阈值(也可以看作上下移动蓝色的虚线),来选择让系统识别能出多少个图片,当然阈值的变化会导致Precision与Recall值发生变化。比如,把蓝色虚线放到第一张图片下面,也就是说让系统只识别出最上面的那张飞机图片,那么Precision的值就是100%,而Recall的值则是20%。如果把蓝色虚线放到第二张图片下面,也就是说让系统只识别出最上面的前两张图片,那么Precision的值还是100%,而Recall的值则增长到是40%。

Retrieval Precision Recall
TOP 1 Image 100% 20%
TOP 2 Image 100% 40%
TOP 3 Image 66% 40%
TOP 4 Image 75% 60%
TOP 5 Image 60% 60%
TOP 6 Image 66% 80%
TOP 7 Image 57% 80%
TOP 8 Image 50% 80%
TOP 9 Image 44% 80%
TOP 10 Image 50% 100%

ROC曲线

ROC曲线(receiver operating characteristic curve,简称ROC曲线),以TPR为y轴,以FPR为x轴,我们就直接得到了RoC曲线。从FPR和TPR的定义可以理解,TPR越高,FPR越小,我们的模型和算法就越高效。也就是画出来的RoC曲线越靠近左上越好。如下图左图所示。从几何的角度讲,RoC曲线下方的面积越大越大,则模型越优。所以有时候我们用RoC曲线下的面积,即AUC(Area Under Curve)值来作为算法和模型好坏的标准。

20180511113430525.png-41.8kB

PR曲线


References

  • 《机器学习》周志华
  • https://blog.csdn.net/hysteric314/article/details/
  • https://www.cnblogs.com/Zhi-Z/p/8728168.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218609.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:51
下一篇 2026年3月17日 下午11:51


相关推荐

  • talnet服务器搭建

    talnet服务器搭建刚安装的ubuntu12.04还没有telnet功能,需要配置一下我主要是想让ubuntu12.04开启telnet服务做服务器安装openbsd-inetd:#sudoapt-getinstallopenbsd-inetd安装telnetd:#sudoapt-getinstalltelnetd在etc/inetd.conf文件中可以看到这一

    2022年6月16日
    49
  • Python学习笔记:‘’AttributeError: NoneType object has no attribute‘’

    Python学习笔记:‘’AttributeError: NoneType object has no attribute‘’前言最近在学习 python 犯了很多低级错误 总结一下 问题 AttributeErr NoneType objecthasnoa text 出处 difficult obj find difficult text 方案错误提示的是空元素 没有对应的属性 lt object gt lt n

    2026年3月19日
    3
  • 更新pycharm版本_pycharm怎么更改python环境

    更新pycharm版本_pycharm怎么更改python环境如下图,记录要勾选Makeavaliabletoallprojects,然后查看是否加载出所有的第三方插件,会遇到插件安装后,运行还是找不到插件的问题,就是这里选择的不对,Pycharm总是会自己修改Baseinterperter路径,安装好后,在这里修改路径,看到有加载出来就可以了…

    2022年8月27日
    7
  • sigterm信号_详解如何在 docker 容器中捕获信号

    sigterm信号_详解如何在 docker 容器中捕获信号概述玩过 docker 的朋友可能都使用过 dockerstop 命令来停止正在运行的容器 有些会使用 dockerkill 命令强行关闭容器或者把某个信号传递给容器中的进程 这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互 比如我们可以向容器中的应用发送一个重新加载信号 容器中的应用程序在接到信号后执行相应的处理程序完成重新加载配置文件的任务 下面主要介绍在 docker 容

    2026年3月18日
    2
  • Ubuntu 上docker部署 OpenClaw

    Ubuntu 上docker部署 OpenClaw

    2026年3月13日
    2
  • linux基础-linux和unix的区别[通俗易懂]

    linux基础-linux和unix的区别[通俗易懂]有时候我们对天天使用的Linux指令,只知道怎么用,却分不清概念用法区别,我觉得很有必要整理整理大家熟视无睹的一些linux概念区别。首先说说unix和linux的区别:linux和unix的最大的区

    2022年8月1日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号