本文所讲内容的前提是一个二分类的任务,多分类任务可以经过简单扩展用转化成二分类。

评估一个二分类的分类器的性能指标有:准确率、查准率(precision)、查全率(recall)、F1值以及ROC和AUC等。前面几个比较直观,而ROC和AUC相对抽象一点,本文将重点放在后者。因为本人曾一度没搞清ROC,所以这次彻底搞明白。

从混淆矩阵说起

首先一个用分类器预测完后,我们会得到一个二分类的混淆矩阵:


多分类的混淆矩阵这里暂不考虑,但是分析是类似的。

准确率

所有预测正确的样本占所有样本的比例,但这个指标在类别比例不平衡时不太恰当。

查准率(Precision)

直观理解为: 在所有预测为正例中,真正正例的比例。(有点绕,多读几遍就好)

P=TPTP+FPP=TPTP+FP

P=\frac{TP}{TP+FP}

查全率(Recall)

直观理解为: 在所有真实的正例中,预测为正例的比例。

R=TPTP+FNR=TPTP+FN

R=\frac{TP}{TP+FN}

F1-score

由于Precision和Recall是一对不可调和的矛盾,很难同时提高二者,也很难综合评价。故提出F1来试图综合二者,F1是P和R的调和平均(harmonic mean):

1F1=12(1P+1R)→F1=2PRP+R1F1=12(1P+1R)→F1=2PRP+R

\frac{1}{F1} =\frac{1}{2}( \frac{1}{P} +\frac{1}{R} ) \rightarrow F1 =\frac{2PR}{P+R}

什么是ROC曲线

先有一个概念:很多学习器能输出一个实值或者概率预测,然后设定一个阈值,高于阈值为正类,反之负类。分类的过程就是设定阈值,并用阈值对预测值做截断的过程,当这个阈值发生变动时,预测结果和混淆矩阵就会发生变化,最终导致一些评价指标的值的变化。

Wikipedia上对ROC曲线的定义:

In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

重点就在于这个“as its discrimination threashold is varied”。

在进一步了解ROC之前,首先定义两个指标:

  • 真正例(True Positive Rate,TPR),表示所有正例中,预测为正例的比例:

    TPR=TPTP+FNTPR=TPTP+FN

    TPR=\frac{TP}{TP+FN}

  • 假正例(False Positive Rate,FPR),表示所有负例中,预测为正例的比例:
    FPR=FPTN+FPFPR=FPTN+FP

    FPR=\frac{FP}{TN+FP}

FPR为横坐标,TPR为纵坐标,那么ROC曲线就是改变各种阈值后得到的所有坐标点 (FPR,TPR) 的连线,画出来如下。红线是随机乱猜情况下的ROC,曲线越靠左上角,分类器越佳。


真实情况下,由于数据是一个一个的,阈值被离散化,呈现的曲线便是锯齿状的,当然数据越多,阈值分的越细,”曲线”越光滑。

AUC是什么

AUC(Area Under Curve)就是ROC曲线下的面积。
AUC的计算有两种方式,梯形法ROC AUCH法,都是以逼近法求近似值,具体见wikipedia。

AUC的含义

根据(Fawcett, 2006),AUC的值的含义是:

The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

有点绕,解释一下:首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率,就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。

用AUC判断分类器(预测模型)优劣的标准:

  • AUC = 1 是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

简单说:AUC值越大的分类器,正确率越高。

为什么使用ROC曲线

既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。
在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:


在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。


用python的sklearn:绘制ROC曲线+求AUC

1.分别求ROC和AUC

求 ROC:sklearn.metrics.roc_curve()
求 AUC:sklearn.metrics.auc()

import numpy as np
from sklearn.metrics import roc_curve, aucy = np.array([1, 1, 1, 1, 1,2, 2, 2, 2, 2])
y_proba = np.array([0.1, 0.4, 0.4, 0.3, 0.5,0.4, 0.6, 0.7, 0.8, 0.5])   # probability of prediction as positivefpr, tpr, thresholds = roc_curve(y, y_proba, pos_label=2)
auc = auc(fpr, tpr)
>>> fpr
array([0. , 0. , 0.2, 0.6, 1. ])
>>> tpr
array([0.2, 0.6, 0.8, 1. , 1. ])
>>> thresholds
array([0.8, 0.6, 0.5, 0.4, 0.1])
>>> auc
>>> 0.9

fprtpr 的值用matplotlib绘制即得ROC曲线。如下图:

2. 直接求AUC

也可以用 sklearn.metrics.roc_auc_score() 直接求得AUC

>>> import numpy as np
>>> from sklearn.metrics import roc_auc_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> roc_auc_score(y_true, y_scores)
0.75

References:

ROC和AUC介绍以及如何计算AUC
Let’s learn about AUC ROC Curve!
The Probabilistic Interpretation of AUC
Probabilistic interpretation of AUC
机器学习之分类性能度量指标 : ROC曲线、AUC值、正确率、召回率
模型评估与选择概述
ROC曲线和AUC值的计算

代码部分:
sklearn - roc_curve()
sklearn - auc()
sklearn - roc_auc_score()
sklearn - ROC Demo

更多机器学习评价指标的实现请前往 sklearn.metrics: Metrics

机器学习评价指标 ROC与AUC 的理解和python实现相关推荐

  1. 深度学习_深度学习基础_评价指标ROC、AUC、AP、mAP详解

    ROC和AUC ROC全称是"受试者工作特征"(Receiver Operating Characteristic). ROC曲线的面积就是AUC(Area Under Curve ...

  2. 精度、召回率、准确率、F1、ROC、AUC的理解

    1. 错误率.精度 精度(accuracy) 分类正确的样本数占总样本数的比例 错误率(error rate) 分类错误的样本数占总样本数的比例 通常来说精度(accuracy)不是一个好的性能指标, ...

  3. 机器学习评价指标ROC AUC

    https://blog.csdn.net/qq_20011607/article/details/81712811

  4. 机器学习中ROC及AUC通俗易懂的解释

    ROC(receiver operating characteristic curve):接收者操作特征曲线. AUC(Area Under Curve):上面曲线与X, Y轴形成的最大面积. 如果你 ...

  5. 机器学习分类模型评价指标之ROC 曲线、 ROC 的 AUC 、 ROI 和 KS

    前文回顾: 机器学习模型评价指标之混淆矩阵 机器学习模型评价指标之Accuracy.Precision.Recall.F-Score.P-R Curve.AUC.AP 和 mAP 图裂的话请参考:ht ...

  6. 机器学习中的评价指标(分类指标评Accuracy、Precision、Recall、F1-score、ROC、AUC )(回归指标评价MSE、RMSE、MAE、MAPE、R Squared)

    文章目录 1.机器学习中的评价指标 基础 (一)分类指标评价 1.Accuracy 2.Precision.查准率 3.Recall.查全率 4.F1-score 举个例子: 5.ROC 6.AUC ...

  7. 机器学习笔记 - IOU、mAP、ROC、AUC、准确率、召回率、F分数

    一.什么是交并比? 1.交并比(IOU)概述 交并比(Intersection over Union) 是一种评估指标,用于衡量目标检测器在特定数据集上的准确性.任何提供预测边界框作为输出的算法都可以 ...

  8. auc到多少有意义_对模型评价指标AUC的理解

    AUC是一种衡量机器学习模型分类性能的重要且非常常用的指标,其只能用于二分类的情况. AUC的本质含义反映的是对于任意一对正负例样本,模型将正样本预测为正例的可能性 大于 将负例预测为正例的可能性的 ...

  9. 对模型评价指标AUC的理解

    AUC是一种衡量机器学习模型分类性能的重要且非常常用的指标,其只能用于二分类的情况. AUC的本质含义反映的是对于任意一对正负例样本,模型将正样本预测为正例的可能性 大于 将负例预测为正例的可能性的 ...

  10. 精确率、召回率、F1 值、ROC、AUC等分类模型评价指标含义与作用详解

    文章目录 摘要 一.精确率.召回率.F函数.准确率和错误率 1.定义 2.区别与应用 二.ROC曲线.P-R曲线.AUC 1.P-R曲线 2.ROC曲线 3.AUC 摘要 在涉及机器学习领域的分类问题 ...

最新文章

  1. 水管工游戏 (深搜)
  2. php批量修改图片地址,织梦网站内容页图片绝对路径设置及批量替换方法
  3. .NET 搭建简单的通知服务
  4. 一个.NET Core开发者的Linux入门学习笔记
  5. 微信小程序 - 回到自己位置(map)
  6. ajax 在新选卡打开,开始使用 AJAX 控制工具包 (VB) | Microsoft Docs
  7. python判断某年是否为闰年的程序_Python 学习--从0到1(4. 题3)
  8. 丰巢快递将强制收费引网友吐槽,全国第一驿站表示继续免费
  9. ACM 竞赛高校联盟 练习赛 第六场 韩梅梅的抽象画(图论水题)
  10. java检查页面ajax请求,Java AJAX电子邮件检验示例
  11. JAVA基础知识总结2(语法基础)
  12. 游戏音效素材大全下载 - 3000首高清无损-按分类整理
  13. C语言运算符优先级(超详细)
  14. CTC,RNN-Transducer, LAS
  15. echarts关系图图谱配置详解
  16. CLRS 17.4动态表
  17. Python:实现doomsday末日算法(附完整源码)
  18. MySQL主从配置和gtid主从配置
  19. centos下设置屏保
  20. 《网站分析实战--如何以数据驱动决策,提升网站价值》学习笔记

热门文章

  1. 多轴联动编程C语言,全国数控技能大赛―复杂部件造型、多轴联动编程与加工_...
  2. oa项目经验描述_项目执行简历中的项目经验怎么写
  3. 传染病模型(4)——SIRS模型和SIER模型及matlab具体程序
  4. 电赛提升----风力摆控制系统
  5. 配置和google浏览器版本一直的webdriver
  6. jvm之java类加载机制和类加载器(ClassLoader)的详解
  7. python爬虫 图片验证码_python爬取验证码图片(待识别)
  8. 数字信号处理教程答案及解析(第五版)
  9. 学习人工智能导论(3)
  10. linux qt qpa linuxfb,Qt 5.4带有Tslib的Linux触摸屏输入在Raspberry Pi上无法使用LinuxFB QPA平台插件...