准确率,召回率,F值,ROC,AUC
责任编辑:词汇网 发表时间:2016-4-23 20:08:08

度量表

1.准确率

(presion)p=TPTP+FP

理解为你预测对的正例数占你预测正例总量的比率,假设实际有90个正例,10个负例,你预测80(75+,5-)个正例,20(15+,5-)个负例实际上你的准确率为75/80=0.9375,但这个评价指标有什么问题呢,想想就知道,这里你并没有用到实际的正例数,那么仅仅靠你猜中的正例作为分母,你并不知道实际的正例有多少,你看召回率为75/90=0.83,就是说你的猜测局限于预测范围

2.召回率
(recall)r=TPTP+FN

理解为你预测对的正例数占真正的正例数的比率,

假设实际有90个正例,10个负例,你如果拍脑袋说有100(90+,10-)个正例,召回率为90/90=1,这样也是不合理的,特别是在正负样本失衡,正样本接近于总数的时候从文本检索的角度来分析下相应的解释:
3. F值为p和r的调和平均值 F=2rpp+r

单一的准确率高和召回率高并不能说明问题,所以才有了F值得衡量指标

如上实例实际上 F=0.882,介于准确率和召回率之间。

4.ROC曲线

对于0,1两类分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络,得到诸如0.5,0,8这样的分类结果。这时,我们人为取一个阈值,比如0.4,那么小于0.4的为0类,大于等于0.4的为1类,可以得到一个分类结果。同样,这个阈值我们可以取0.1,0.2等等。取不同的阈值,得到的最后的分类情况也就不同。

如下面这幅图:

蓝色表示原始为负类分类得到的统计图,红色为正类得到的统计图。那么我们取一条直线,直线左边分为负类,右边分为正,这条直线也就是我们所取的阈值。

阈值不同,可以得到不同的结果,但是由分类器决定的统计图始终是不变的。这时候就需要一个独立于阈值,只与分类器有关的评价指标,来衡量特定分类器的好坏。

还有在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然是没有意义的。

如上就是ROC曲线的动机。

关于两类分类问题,原始类为positive,negative,分类后的类别为p,n。排列组合后得到4种结果

于是我们得到四个指标,分别为真阳,伪阳;伪阴,真阴。

ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。这两个值由上面四个值计算得到,公式如下:

TPR:在所有实际为阳性的样本中,被正确地判断为阳性之比率。

TPR=TP/(TP+FN)

FPR:在所有实际为阴性的样本中,被错误地判断为阳性之比率。

FPR=FP/(FP+TN)

放在具体领域来理解上述两个指标。

如在医学诊断中,判断有病的样本。

那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。

而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。

不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。

我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。

我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。

点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。

上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。

还是一开始的那幅图,假设如下就是某个医生的诊断统计图,直线代表阈值。我们遍历所有的阈值,能够在ROC平面上得到如下的ROC曲线。


曲线距离左上角越近,证明分类器效果越好。

如上,是三条ROC曲线,在0.23处取一条直线。那么,在同样的低FPR=0.23的情况下,红色分类器得到更高的PTR。也就表明,ROC越往上,分类器效果越好。我们用一个标量值AUC来量化他。

AUC

AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

AUC的物理意义

假设分类器的输出是样本属于正类的socre(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。

计算AUC:

第一种方法:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积之和。计算的精度与阈值的精度有关。

第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取N*M(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(N*M)。

第三种方法:与第二种方法相似,直接计算正样本score大于负样本的概率。我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=N+M),其次为n-1。那么对于正样本中rank最大的样本,rank_max,有M-1个其他正样本比他score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。最后我们得到正样本大于负样本的概率为

时间复杂度为O(N+M)。

准确率,召回率,F值,ROC,AUC相关推荐

  1. [机器学习] 二分类模型评估指标---精确率Precision、召回率Recall、ROC|AUC

    一 为什么要评估模型? 一句话,想找到最有效的模型.模型的应用是循环迭代的过程,只有通过持续调整和调优才能适应在线数据和业务目标. 选定模型时一开始都是假设数据的分布是一定的,然而数据的分布会随着时间 ...

  2. 准确率/召回率/精准率/F值_模型评价

    准确率/召回率/精准率/F值 模型选择:对特定任务最优建模方法的选择或者对特定模型最佳参数的选择. 在训练数据集上运行模型(算法)并在测试数据集中测试效果, 迭代进行数据模型的修改, 这种方式被称为交 ...

  3. 准确率-召回率 - Precision-Recall

    Precision-Recall 准确率-召回率 本文翻译自 Precision-Recall 更多翻译可以看 Scikit-learn 某部分的中文翻译 用于评估分类器输出质量的 准确率-召回率 指 ...

  4. 【数据挖掘】K-NN 分类 ( 简介 | 分类概念 | K-NN 分类实例 | K-NN 分类准确度评估 | K-NN 分类结果评价指标 | 准确率 | 召回率 )

    文章目录 I . K-NN 简介 II . K-NN 分类 III . K-NN 分类实例 IV . K-NN 分类 准确性评估方法 V . 保持法 VI . kkk-交叉确认法 VII . K-NN ...

  5. 精确度/召回率/F1值/Micro-F1和Macro-F1的理解

    如下图所示,假设有若干张图片,其中12张是狗的图片其余是猫的图片.现在利用程序去识别狗的图片,结果在识别出的8张图片中有5张是狗的图片,3张是猫的图片(属于误报). 图中,实心小圆代表狗的图片,虚心小 ...

  6. 准确率 召回率_机器学习中F值(F-Measure)、准确率(Precision)、召回率(Recall)

    在机器学习.数据挖掘.推荐系统完成建模之后,需要对模型的效果做评价. 业内目前常常采用的评价指标有准确率(Precision).召回率(Recall).F值(F-Measure)等,下图是不同机器学习 ...

  7. Precision(精确率,正确率), Recall(召回率,查全率),Accuracy(准确率),F-Measure(F值)...

    一.指标概念 TP - 将正类预测为正类 FN - 将正类预测为负类, 类似假设检验中的第一类错误,拒真 FP - 将负类预测位正类,类似假设检验中的第二类错误,取伪 TN - 将负类预测位负类 假设 ...

  8. 我对于准确率---p值,召回率R值以及F值的理解

    再互联网广告的推荐系统和反作弊的实践中经常遇到准确率,召回率,F值几个东西,刚入行的时候,我经常搞混,直到后来我逐渐明白了. 举个列子! 我们用一个模型去判断一段时间的作弊流量,假设该段时间的流量是1 ...

  9. 准确率 召回率_机器学习tips(四):精确率(precision)和召回率(recall)

    精确率(precision)和召回率(recall) 混淆矩阵 True Positive(真正, TP):将正类预测为正类数. True Negative(真负 , TN):将负类预测为负类数. F ...

最新文章

  1. c#获取父类_C#——父类中的this的指向,及用反射获取当前类所在的Type | 学步园...
  2. 重写,重载,抽象类,接口,抽象类和接口区别
  3. 参数修饰符 params、in
  4. c++ socket学习(1.1)
  5. 学习中遇到的c++问题,持续更新
  6. iOS简单动画实现方案
  7. 生长区域算法的php实现
  8. Charles proxy tools 移动开发调试
  9. python中怎么调整代码字体格式_PyCharm中代码字体大小调整方法
  10. 好玩,AI 让老照片动起来(附 APP 软件地址)
  11. 边缘检测---Roberts算子
  12. Java Web程序设计笔记 • 【第1章 Web应用程序】
  13. 成为独立游戏制作人需要注意的六件事
  14. 青岛小学 初中有计算机编程比赛,2017年青岛中小学信息技术竞赛活动.doc
  15. Windows的权限(用户、组和访问控制)
  16. 字体加粗造成文字抖动
  17. 数学建模美国赛论文常用句式总结
  18. linux文件管理命令ppt,linux命令以及文件管理.ppt
  19. 单元格内容分列多行_excel如何将同一个单元格的多行内容拆分
  20. 大专毕业领导diss我学历低能力差,该怼回去吗?

热门文章

  1. asp.net 2.0 简单实现url重写
  2. 批处理常用命令及用法大全
  3. .bash_profile和.bashrc的区别
  4. 2 模版_轻量html模版渲染库 cJinja
  5. matlab 读取csv_利用Pytorch进行数据加载1--CSV文件的读取和显示
  6. DotNet指定文件显示的尺寸
  7. Octopress配置和部署
  8. winfrom。布局
  9. php导出excel数据使用csv替代xls格式
  10. node 同步js代码-超越昨天的自己系列(5)