以下文章摘录自:

《机器学习观止——核心原理与实践》

京东: https://item.jd.com/13166960.html

当当:http://product.dangdang.com/29218274.html

(由于博客系统问题,部分公式、图片和格式有可能存在显示问题,请参阅原书了解详情)

————————————————

版权声明:本文为CSDN博主「林学森」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xuesen_lin/

1.1        Precision、recall和mAP (mean  Average  Precision)

计算机领域有很多评估识别结果精度的方式,mAP就是其中应用非常广泛的一种。它的计算过程并不复杂,引用Wikipedia上的描述:

“Mean average precision for a set of queries is the mean of the average precision scores for each query.”

对应的公式是:

其中Q是指查询的次数。

Wiki上的释义虽然是针对信息检索提出来的,但同样可以被机器学习领域用于评估预测精度。在mAP公式中,涉及到了AveP(q)的计算过程。而如果要理解后者,首先得先明白3个指标:Accuracy、Recall和Precision。

不论是针对哪种场景,二分类模型的检测结果都有如下4种可能性:

l  True Positive (TP)

预测值为1,实际值也为1,检测正确

l  False Positive (FP)

预测值为1,但实际值为0,检测错误

l  True Negative (TN)

预测值为0,实际值也为0,检测正确

l  False Negative (FN)

预测值为0,实际值为1,检测错误

Accuracy和Precision都很好理解,它们指的是:

Accuracy = (TP + TN) / (TP + FP + TN + FN)

Precision = TP / (TP + FP)

但是仅有这两个指标是不够的。举个实际的例子大家就很好理解了:我们知道“导弹攻击信号”有可能是真实的,也可能是模拟出来的。现在假设100次中真正的导弹攻击事件是3次,同时某导弹攻击防御器成功检测出了其中的两次。那么可以得出:

TP=2

TN=97

FP=0

FN=1

所以Accuracy = 99%, 而Precision = 2/2 = 100%。可见光从这两个值来看,这个导弹防御器的表现似乎已经非常不错了。但事实真的如此吗?毋庸置疑导弹攻击是非常致命的,所以即便是只有一次的失误,也是让人无法接受的。

或者我们再换一种思路——如果程序员为了偷懒,写了一个类似下面的导弹攻击检测器:

boolean isRealMissile()

{

return false;//管它是真是假,一律当假的处理。提前下班。。。

}

那么针对上面这一模型的评估结果如何呢?

此时:

TP = 0

TN = 97

FP = 0

FN = 3

因而Accuracy = 97%。也就是说即便什么都不做,系统也可以达到很高的准确率,这显然不是我们希望看到的结果。

这也是引入Recall的原因之一。它的定义如下所示:

Recall = TP / (TP+FN)

而上述两种情况因为Recall值分别为66.6%及0,终于得到了相对公正的评价。

理解了Precision和Recall后,接下来我们就可以进一步分析Average Precision了。对于一个多标签图像分类系统来说,每一个预测分类(例如小猫)都可以得到它们的confidence score,以及对应的Ground Truth Label。范例如下:

Index

Confidence Score

Ground Truth Label

5

0.98

1

4

0.95

1

2

0.89

0

1

0.82

1

3

0.78

1

6

0.67

0

上表已经按照Confidence Score进行了排序,Index指的是参与分类的图片编号。

假设我们认为列表中的Top-2是Positive的,那么对照Ground Truth Label不难发现TP = 2,同理也可以计算得出TP等其它值,并最终得到Top-2情况下的Recall和其对应的Precision。

再假设我们认为列表中的Top-3是Positive的,那么同样的最终也能得到这种情况下的Recall和其对应的Precision。如此循环直到Top-N,此时Recall的值一定为1。

在上述的循环过程中,我们实际上得到的是所谓的precision-recall function。如果以recall为横坐标,precision为纵坐标绘制出curve,那么将得到类似如下的图形:

图  Precision-recall curve

关于PRC曲线,我们后续小节还会有进一步的介绍。

Average Precision简单来说就是针对每个recall对应的precision求均值得来的。因为是多标签分类的任务,所以还可以对所有分类情况做AP,然后取均值,也就得到了mean Average Precision (mAP)了。

1.2        F1 Score

F1 Score又称为平衡F分类,其与precision和recall都有关系——准确地说它兼顾了后两者,是它们的一种加权平均。

具体而言,F1 Score的公式如下:

另外,我们还可以由此引申出 ,如下所示:

不难看出,F1是上述公式的特例,其它常用的还有F2, F0.5等等。

那么人们提出F1 Score的意义是什么呢?

很简单,就是为了解决当precision和recall出现冲突时的“难以抉择”的情况。比如当我们遇到类似下面这样的场景时:

模型

Recall

precision

模型1

0.6

0.8

模型2

0.8

0.6

究竟是模型1更好,还是模型2更佳呢?

此时Fβ就可以发挥作用了——F1认为recall和precision的权重是一样的,而F2则认为前者比后者重要(成反比),等等。

F分数目前被应用于多个机器学习算法领域,是一个相当通用的衡量指标,我们在后续多个章节中还会再看到它的身影。

1.3        Confusion Matrix

Confusion Matrix (混淆矩阵),又称为可能性表格或是错误矩阵,是一种用来呈现算法性能效果的特定矩阵。

下面我们结合一个实际的混淆矩阵来做下释义。如下所示:

precision     recall   f1-score     support

体育       0.99      0.99      0.99      1000

财经       0.96      0.99      0.97      1000

房产       1.00      1.00      1.00      1000

家居       0.95      0.91      0.93      1000

教育       0.95      0.89      0.92      1000

科技       0.94      0.97      0.95      1000

时尚       0.95      0.97      0.96      1000

时政       0.94      0.94      0.94      1000

游戏       0.97      0.96      0.97      1000

娱乐       0.95      0.98      0.97      1000

这是一个文本分类器的范例,可以看到它包含了体育、财经、房产等10个分类。上述的一系列数值描述了每一个分类的precision、recall等信息,它们为我们理解分类器的全局性能提供了关键输入。

如果我们还想细化分析每一种类别的实际分类结果呢?

此时就可以用到混淆矩阵了。

如下所示:

Confusion Matrix...

[[991   0   0   0   2   1   0   4   1   1]

[  0 992   0   0   2   1   0   5   0   0]

[  0   1 996   0   1   1   0   0   0   1]

[  0  14   0 912   7  15   9  29   3  11]

[  2   9   0  12 892  22  18  21  10  14]

[  0   0   0  10   1 968   4   3  12   2]

[  1   0   0   9   4   4 971   0   2   9]

[  1  16   0   4  18  12   1 941   1   6]

[  2   4   1   5   4   5  10   1 962   6]

[  1   0   1   6   4   3   5   0   1 979]]

上面所述的就是这个文本分类器的confusion matrix评估结果。不难看出它的行列数都是10,也就是一个n*n的矩阵。其中每一行都是一个真实的归属类别,因而每一行的数据总数表示该类别的数据实例的数目;而每一列则是真实类别被预测为该类的数目。示意图如下所示:

表格  Confusion matrix的行列释义

预测类别

类别1

类别2

类别3

类别4

实际归属类别

类别1

类别2

类别3

类别4

以前面的范例来讲,第一行对应的真实类别是“体育”——而预测结果中,“体育”(true positive)的数量是991,其它被预测为“财经”、“房产”、“家居”、“教育”的数量则分别为0、0、0和2。

所以通过confusion matrix,我们不仅可以计算出true positive、true negative、false positive、false negative四个数值,而且还能进一步挖掘出预测结果中准确或者不准确的地方具体有哪些。这给我们至少带来了如下一些好处:

l  更有针对性的调整模型参数

通过观察和分析每一种类别的实际预测结果,有助于“对症下药”改善分类器模型

l  更有针对性的分析数据集问题

对于数据集不平衡(即每一类别的数据样本数量相差太大)的情况,单纯从precision等指标很难看出来,而confusion matrix则可以给出有效的指引

1.4        ROC

ROC,即receiver operating characteristic curve通常直译为接收器操作特性曲线或者受试者工作特征曲线。

大家先来看一下ROC实际“长什么样子”,如下图所示:

图  ROC曲线

从图中可以清晰地看到,ROC的横纵坐标分别是1-Specificity和Sensitivity。这两个指标又是什么呢?简单地说,它们分别代表的是False Positive Rate和True Positive Rate。

根据前面的学习:

l  True Positive (TP)

预测值为1,实际值也为1,检测正确

l  False Positive (FP)

预测值为1,但实际值为0,检测错误

l  True Negative (TN)

预测值为0,实际值也为0,检测正确

l  False Negative (FN)

预测值为0,实际值为1,检测错误

所以:

FPR =  

TPR =  

另外,True Negative Rate的计算公式是:

TNR = 

TNR又被称为specificity,而且不难推导出:

1-TNR

= 1- 

= FPR

这就是上图中横坐标1-specificity的由来了。

那么ROC曲线是如何绘制出来的呢?

我们知道,某些分类器基于训练样本会产生一个预测概率,所以最终结果与一个设定的阈值有关——预测值与此阈值进行比较,若大于阈值会被分为正类,否则分为反类。

不同任务中,我们可以根据实际诉求来选择不同的阈值。通常情况下,如果更注重“查准率”,那么应该优先选择排序中靠前的位置进行截断;反之若更关心“查全率”,则建议选择靠后的位置进行截断。由此就产生了本小节所讲述的ROC曲线。

图  ROC曲线的产生过程示意

从ROC曲线的绘制过程,我们可以看出它可以用于评估分类器的性能好坏,而且理论上曲线距离左上角越近则证明分类器效果越好。

1.5        AUC

除了ROC曲线外,AUC也是一个常用的模型评估手段,它是“Area Under Curve”的英文缩写。从字面意思上来解读,AUC是指曲线所组成的面积,那么是什么样的曲线呢?

其实就是前一小节讲解的ROC曲线。

图  AUC范例

不难理解,AUC的值越大那么被评估的分类器的分类效果理论上就越好。

l  AUC = 1时

代表一个完美的分类器。采用这个预测模型时,不管设定什么阈值都能得出完美的预测结果。但是这种完美的分类器基本上不存在

l  0.5 < AUC < 1时

预测结果比随机猜测要好。换句话说,如果妥善设定这个分类器的话,它是具备预测价值的

l  AUC = 0.5时

代表该模型的预测结果基本上和随机猜测一样(更直白一点,就是“瞎猜”的结果),此时模型并没有什么预测价值

l  AUC < 0.5

代表该模型比随机猜测的结果还要糟糕;不过如果总是反预测而行,它还是优于随机猜测

一般情况下,我们认为只有达到0.9以上的AUC才是一个准确性较高的分类器模型。

理解了AUC的定义后,我们再来讨论一下如何计算AUC的值。典型的实现有如下几种:

l  直接计算面积大小

这可能是大多数人想到的最直接的方法——因为AUC理论上就是ROC曲线下的面积大小。不过这个方法有什么缺陷呢?

我们知道,ROC曲线的绘制与阈值的设定有关。换句话说,大家最终得到的曲线由于“采样”数量的限制通常不是“平滑”的,它呈现出一个个阶梯形状。如下图所示:

图  实际的ROC曲线会呈现“阶梯状态”

所以我们计算得到的AUC准确性就和阈值的设置有较大关联性了。

l  根据Wilcoxon-Mann-Witney Test来计算

我们计算正样本score大于负样本score的概率就可以得到AUC。具体取N*M(N为正样本数,M为负样本数)个正负样本二元组,比较score后得到AUC,其时间复杂度为O(N*M)。和上面计算面积的方法类似,样本数越多则计算得到的AUC越准确

l  第三种方法与第二种方法有点相似,都是直接计算正样本score大于负样本的score的概率,区别在于复杂度降低了。首先我们把所有样本按照score来排序,然后依次用rank来表示他们。比如对于score最大的样本,rank=n (n=N+M),其次为n-1,n-2,以此类推。那么对于正样本中rank最大的样本(rank_max),有M-1个其他正样本比他的score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。因此最后我们得到正样本大于负样本的概率为:

当然,业界已经有不少工具提供了计算AUC的便捷API了,例如下面是scikit-learn库中与AUC计算相关的一个接口原型:

sklearn.metrics.auc(x, y, reorder=False)

它的具体参数定义如下所示:

最后,我们再来总结一下为什么要使用ROC和AUC,或者说它们的特别之处在哪里。简单而言,ROC有一个显著的优点:即当测试集中的正样本和负样本分布发生变化的时候,ROC曲线能够保持不变。由于实际的数据集中经常会出现类间的不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化,此时这一特性就能显示出其独特价值了。

对于ROC的上述特征,业界已经做过不少研究和实验了,如Tom Fawcett在《An introduction to ROC analysis》论文中所描述的:

图  ROC和PR曲线对比

其中 (a)和(b)是分类器在原始测试集(此时正负样本分布平衡)上的预测结果,而(c)和(d)则是将测试集中的负样本数量增加到原来的10倍后,分类器的ROC和PR曲线的评估结果。从中可以清晰地看到ROC曲线可以基本保持不变,而后者则出现了“剧变”。

机器学习指标(Precision、Recall、mAP、F1 Score等)相关推荐

  1. 多类别分类任务(multi-class)中为何precision,recall和F1相等?

    文章目录 背景: precision, recall和F1 score的定义 micro averaging的计算及其示例 macro averaging 和 weighted averaging m ...

  2. 机器学习:PR曲线及F1 score

    PR曲线及F1 score Pecision 和 Recall PR曲线 PR曲线的绘制 PR曲线的性能比较 F1 score F1 的一般形式 macro-F1 micro-F1 Pecision ...

  3. 深度学习基本知识(一)评价方法precision\recall\mAP

    1.几种类型 比如我们要做一个在一堆猫狗图片中找猫的网络,那么: TruePositive(TP):真阳性,检测出是猫(1),真实情况确实是猫(1) FalsePositive(FP):假阳性,检测出 ...

  4. 机器学习模型常用评价指标(Accuracy, Precision, Recall、F1-score、MSE、RMSE、MAE、R方)

    前言 众所周知,机器学习分类模型常用评价指标有Accuracy, Precision, Recall和F1-score,而回归模型最常用指标有MAE和RMSE.但是我们真正了解这些评价指标的意义吗? ...

  5. 机器学习分类器评价指标详解(Precision, Recall, PR, ROC, AUC等)(一)

    为了系统性地理解机器学习模型的不同评价指标及其之间的关系,我们将从其定义出发,探究其物理含义及彼此之间的联系,并从数学上给出相应的公式推导,以方便后续用到时复习理解.由于篇幅较长,因此将其分为两篇,这 ...

  6. 多分类模型Accuracy, Precision, Recall和F1-score的超级无敌深入探讨

    https://zhuanlan.zhihu.com/p/147663370?from_voters_page=true 众所周知,机器学习分类模型常用评价指标有Accuracy, Precision ...

  7. 机器学习常用的评测指标Rank-n、Precision Recall、F-score、Map 、CMC、ROC Single shot 和Muti shot

    机器学习中常用的评测指标为:Rank-n.Precision & Recall.F-score.Map .CMC.ROC Single shot 和Muti shot,下面一个个进行介绍. 写 ...

  8. 机器学习中的 precision、recall、accuracy、F1 Score

    1. 四个概念定义:TP.FP.TN.FN 先看四个概念定义:  - TP,True Positive  - FP,False Positive  - TN,True Negative  - FN,F ...

  9. PR(precision recall curve)曲线是什么?PR曲线如何绘制?为什么Precision和Recall是矛盾体、此消彼长?为什么提出F1指标?

    PR(precision recall curve)曲线是什么?PR曲线如何绘制?为什么PR是矛盾体.此消彼长?为什么提出F1指标? sklearn.metrics.precision_recall_ ...

最新文章

  1. 2020-12-11 keras通过model.fit_generator训练模型(节省内存)
  2. AssetBundle Workflow
  3. 阿里每天究竟要抵御多少攻击
  4. 告别.net ! 2年多了,舍不得!
  5. 【机器学习】监督学习--(回归)一元线性回归
  6. postgre数据库下的 NOT NULL 和 空串(虽然有NOT NULL设定,但是可以插入空串'')
  7. 解决办法:对uncompress未定义的引用
  8. 成都Uber优步司机奖励政策(3月1日)
  9. 高度可定制化 IM聊天界面设计
  10. 数据结构 Java数据结构 --- 反射
  11. html制作朋友圈素材,微信朋友圈图文素材
  12. Ubuntu配置拼音和五笔输入法
  13. 以太坊编程入门实战-熊健-专题视频课程
  14. 第13届蓝桥杯赛后感想
  15. php strtok函数,strtok函数的用法是什么
  16. catti二级笔译综合能力真题_2017年5月英语二级笔译综合能力试题回忆
  17. 论文学习:BP神经网络
  18. Godaddy 添加子域名
  19. ACM训练方法_该我自己检讨了_By LCY
  20. 【PHP注入01】PHP语言常见可注入函数(eval、assert、preg_replace、call_user_func、$a($b)等)

热门文章

  1. 中国软件:10个人 , 20年坎坷路!
  2. 【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现
  3. 教师职称评定论文发表【新规定】老师必看
  4. java调接口实现发送手机短信验证码功能,手机验证码,接口调用
  5. SOMIC E95振动设置
  6. html5ie11缩放,如何设置缩放级别Internet Explorer 9 - Browsers | Microsoft Docs
  7. 他们将区块链技术和人工智能相结合,突破区块链技术瓶颈,提高人工智能行业生产效率
  8. 第九节:点云PointCloud(第2部分,CloudCompare 处理点云)【Three.js整理】
  9. 计算机病毒手动查杀,手动查杀电脑病毒的一些基本方法
  10. ngnix有版本要求吗_DNF:5.21版本更新,安图恩版本回归,熟悉的机制来临