准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,都可以作为评价一个机器学习模型好坏的指标(evaluation metrics),而这些评价指标直接或间接都与混淆矩阵有关,前四者可以从混淆矩阵中直接计算得到,AUC值则要通过ROC曲线进行计算,而ROC曲线的横纵坐标又和混淆矩阵联系密切,所以在了解这些评价指标之前,先知道什么是混淆矩阵很有必要,也方便记忆。

1.混淆矩阵

  对于一个二分类问题,我们可以得到如表 1所示的的混淆矩阵(confusion matrix):

表 1:混淆矩阵

  Actual class
positive class negative class
Predicted class positive class True Positive(TP) False Positive(FP)
negative class False Negative(FN) True Negative(TN)

表 1 所示的混淆矩阵中,行表示数据在模型上的预测类别(predicted class/predicted condition),列表示数据的真实类别(actual class/true condition)。在看混淆矩阵时,要分清样本的真实类别和预测类别,有些地方的行列表示可能和这里不一致。在sklearn中,二分类问题下的混淆矩阵需要分别将表 1 中的predicted class和Actual class对调,将横纵坐标的positive class和negative class都分别对调,再重新计算混淆矩阵。

  通过混淆矩阵,我们可以很直观地看清一个模型在各个类别(positive和negative)上分类的情况。

表 2:TP、FP、FN、TN

TP 真实类别为positive,模型预测的类别也为positive
FP 预测为positive,但真实类别为negative,真实类别和预测类别不一致
FN 预测为negative,但真实类别为positive,真实类别和预测类别不一致
TN 真实类别为negative,模型预测的类别也为negative

  TP、FP、TN、FN,第二个字母表示样本被预测的类别,第一个字母表示样本的预测类别与真实类别是否一致。

2.准确率

  准确率(accuracy)计算公式如下所示:

\begin{equation}\label{equ:accuracy}
\mbox{accuracy} = \frac{TP+TN}{TP+TN+FP+FN} = \frac{TP+TN }{\mbox{all data}}
\end{equation}

准确率表示预测正确的样本(TP和TN)在所有样本(all data)中占的比例。

  在数据集不平衡时,准确率将不能很好地表示模型的性能。可能会存在准确率很高,而少数类样本全分错的情况,此时应选择其它模型评价指标。

3.精确率(查准率)和召回率(查全率)

  positive class的精确率(precision)计算公式如下:

\begin{equation}\label{equ:precision}
\mbox{precision} = \frac{TP}{TP+FP} = \frac{TP}{\mbox{预测为positive的样本}}
\end{equation}

  positive class的召回率(recall)计算公式如下:

\begin{equation}\label{equ:recall}
\mbox{recall} = \frac{TP}{TP+FN} = \frac{TP}{\mbox{真实为positive的样本}}
\end{equation}

  positive class的精确率表示在预测为positive的样本中真实类别为positive的样本所占比例;positive class的召回率表示在真实为positive的样本中模型成功预测出的样本所占比例。    

  positive class的召回率只和真实为positive的样本相关,与真实为negative的样本无关;而精确率则受到两类样本的影响。

4.$F_1$值和$F_\beta$值

  $F_1$值的计算公式如下:
\begin{equation}\label{equ:f1}
F_1 = \frac{2}{\frac{1}{\mbox{precision}}+\frac{1}{\mbox{recall}}} = \frac{2*\mbox{precision}*\mbox{recall}}{\mbox{precision}+\mbox{recall}}
\end{equation}
$F_1$值就是精确率和召回率的调和平均值,$F_1$值认为精确率和召回率一样重要。

  $F_\beta$值的计算公式如下:
\begin{equation}\label{equ:fbeta}
F_\beta = \frac{1+\beta^2}{\frac{1}{\mbox{precision}}+\frac{\beta^2}{\mbox{recall}}} = \frac{(1+\beta^2)*\mbox{precision}*\mbox{recall}}{\beta^2*\mbox{precision}+\mbox{recall}}
\end{equation}
在$\beta = 1$时,$F_\beta$就是$F_1$值,此时$F_\beta$认为精确率和召回率一样重要;当$\beta > 1$时,$F_\beta$认为召回率更重要;当$0< \beta < 1$时,$F_\beta$认为精确率更重要。除了$F_1$值之外,常用的还有$F_2$和$F_{0.5}$。

5.ROC曲线及其AUC值

  AUC全称为Area Under Curve,表示一条曲线下面的面积,ROC曲线的AUC值可以用来对模型进行评价。ROC曲线如图 1 所示:

图 1:ROC曲线

(注:图片摘自https://en.wikipedia.org/wiki/Receiver_operating_characteristic

  ROC曲线的纵坐标True Positive Rate(TPR)在数值上就等于positive class的recall,记作recall$_{positive}$,横坐标False Positive Rate(FPR)在数值上等于(1 - negative class的recall),记作(1 - recall$_{negative}$)如下所示:
\begin{equation}\label{equ:tpr}
\begin{split}
\mbox{TPR} &= \frac{TP}{TP + FN} \\ &= \mbox{recall$_{positive}$}
\end{split}
\end{equation}
\begin{equation}\label{equ:fpr}
\begin{split}
\mbox{FPR} &= \frac{FP}{FP + TN} = \frac{FP + TN -TN}{FP + TN} \\ &= 1 - \frac{TN}{FP + TN} \\ &= 1 - \mbox{recall$_{negative}$}
\end{split}
\end{equation}
  通过对分类阈值$\theta$(默认0.5)从大到小或者从小到大依次取值,我们可以得到很多组TPR和FPR的值,将其在图像中依次画出就可以得到一条ROC曲线,阈值$\theta$取值范围为$[0, 1]$。

  ROC曲线在图像上越接近左上角$(0, 1)$模型越好,即ROC曲线下面与横轴和直线FPR = 1围成的面积(AUC值)越大越好。直观上理解,纵坐标TPR就是recall$_{positive}$值,横坐标FPR就是(1 - recall$_{negative}$),前者越大越好,后者整体越小越好,在图像上表示就是曲线越接近左上角$(0, 1)$坐标越好。

  图 1展示了3个模型的ROC曲线,要知道哪个模型更好,则需要计算每条曲线的AUC值,一般认为AUC值越大越好。AUC值由定义通过计算ROC曲线、横轴和直线FPR = 1三者围成的面积即可得到。

混淆矩阵、准确率、精确率/查准率、召回率/查全率、F1值、ROC曲线的AUC值的更多相关文章

  1. 模型监控指标- 混淆矩阵、ROC曲线,AUC值,KS曲线以及KS值、PSI值,Lift图,Gain图,KT值,迁移矩阵

    1. 混淆矩阵 确定截断点后,评价学习器性能 假设训练之初以及预测后,一个样本是正例还是反例是已经确定的,这个时候,样本应该有两个类别值,一个是真实的0/1,一个是预测的0/1 TP(实际为正预测为正 ...

  2. 二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC

    评价指标是针对同样的数据,输入不同的算法,或者输入相同的算法但参数不同而给出这个算法或者参数好坏的定量指标. 以下为了方便讲解,都以二分类问题为前提进行介绍,其实多分类问题下这些概念都可以得到推广. ...

  3. 精确率、召回率、准确率与ROC曲线

    精确率表示的是预测为某类样本(例如正样本)中有多少是真正的该类样本,一般用来评价分类任务模型. 比如对于一个分类模型,预测结果为A类的所有样本中包含A0个真正的A样本,和A1个不是A样本的其他类样本, ...

  4. 混淆矩阵、准确率、召回率、ROC曲线、AUC

    混淆矩阵.准确率.召回率.ROC曲线.AUC 假设有一个用来对猫(cats).狗(dogs).兔子(rabbits)进行分类的系统,混淆矩阵就是为了进一步分析性能而对该算法测试结果做出的总结.假设总共 ...

  5. 机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、F值(F-measure)、ROC曲线、AUC、准确率(Accuracy)

    原文链接:https://blog.csdn.net/weixin_42518879/article/details/83959319 主要内容:机器学习中常见的几种评价指标,它们各自的含义和计算(注 ...

  6. 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure

    yu Code 15 Comments  机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,评估(Evaluation)是一个必要的 工作,而其评价指标往往有如下几点:准确率(Accu ...

  7. 准确率、精确率、召回率、F1

    在搭建一个AI模型或者是机器学习模型的时候怎么去评估模型,比如我们前期讲的利用朴素贝叶斯算法做的垃圾邮件分类算法,我们如何取评估它.我们需要一套完整的评估方法对我们的模型进行正确的评估,如果模型效果比 ...

  8. 机器学习性能指标精确率、召回率、F1值、ROC、PRC与AUC--周振洋

    机器学习性能指标精确率.召回率.F1值.ROC.PRC与AUC 精确率.召回率.F1.AUC和ROC曲线都是评价模型好坏的指标,那么它们之间有什么不同,又有什么联系呢.下面让我们分别来看一下这几个指标 ...

  9. 一文让你彻底理解准确率,精准率,召回率,真正率,假正率,ROC/AUC

    参考资料:https://zhuanlan.zhihu.com/p/46714763 ROC/AUC作为机器学习的评估指标非常重要,也是面试中经常出现的问题(80%都会问到).其实,理解它并不是非常难 ...

随机推荐

  1. 【BZOJ 1002】: [FJOI2007]轮状病毒

    题目大意:(略) 题解: 第一眼,这不是矩阵树裸体,看了看样例,心想3就有16,那100岂不是要上天…… 果然炸long long……emmmm该不会要打高精除吧……害怕,按照老师的话,不可能考高精除 ...

  2. NOI前的考试日志

    4.14 网络流专项测试 先看T1,不会,看T2,仙人掌???wtf??弃疗.看T3,貌似最可做了,然后开始刚,刚了30min无果,打了50分暴力,然后接着去看T1,把序列差分了一下,推了会式子,发现 ...

  3. phpstorm 下载以及安装

    phpstorm都知道编写php代码比较高效,这里不多说. 关键是用它就要破解,毕竟不想花钱买,在网上找了好多方法,怎么尝试都不管用,后来我只是把版本替换为2017.1(最新版才是2017.3,版本差 ...

  4. 自动化测试框架TestNG

    测试框架有很多,比如常用的 UI自动化测试框架 ①.java+selenium/appium+testNG/Junit+Maven/Ant/Gradle+Jenkins+MySQL+testlink/ ...

  5. UML用法及状态图,活动图介绍

    统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制 ...

  6. 利用ATiny85制作BadUSB

    0x00.准备: ATiny85的板子 淘宝十元包邮.有两款,两款都可以,建议选择左边的,这样可以直接插入USB口,第二款也可以,不过需要一根Micro的数据线(旧款安卓手机使用的线). 电脑安装驱动 ...

  7. SQLI LABS Challenges Part(54-65) WriteUp

    终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...

  8. Caffe源码理解1:Blob存储结构与设计

    博客:blog.shinelee.me | 博客园 | CSDN Blob作用 据Caffe官方描述: A Blob is a wrapper over the actual data being p ...

  9. c#在pictureBox控件上绘制多个矩形框及删除绘制的矩形框

    在pictureBox上每次只绘制一个矩形框,绘制下一个矩形框时上次绘制的矩形框取消,代码如链接:https://www.cnblogs.com/luxiao/p/5625196.html 在绘制矩形 ...

  10. java接口与抽象类

    本片随笔讲讲java中接口与抽象类. 一,接口 1.什么是接口? 那在日常生活中接口是什么呢?就是两个对象之间进行连接的部分就是接口,就比如热水器与水管的接口一样,他可以确保不同的东西之间的顺利连接, ...