1. 阳性和阴性

生活中最常见用到阳性和阴性的地方是检测疾病的时候,这时候检测的是患者有没有得病,有的话就是阳性,没有的话就是阴性。

但这里的阴性和阳性代表什么是认为规定的,在机器学习中有正样本和负样本,更具体一点在机器学习的异常检测中有正常值和异常值,在这个领域异常值一般用阳性来表示,而正常值一般用阴性来表示。

2.混淆矩阵

既然要对样本进行学习然后用模型预测测试集样本是正样本还是负样本,那么就必然有以下几种情况:

∙\bullet∙真阳性:标签为真,预测也为真
∙\bullet∙真阴性:条件为假,预测也为假
∙\bullet∙假阳性:条件为假,但预测为真
∙\bullet∙假阴性:条件为真,但预测为假

把上述定义综合到一起就构成了所谓的混淆矩阵:

通过每个方形中的值可以推导出准确率(accuracy)精确率(precision)和召回率(recall),从而更好地了解模型性能。

3. 准确率、精确率和召回率

首先我们用T(True)来表示真(预测对了),F(False)来表示假(预测错了),P(Positive)来表示阳性(预测为真),N(Negative)来表示阴性(预测为假)。其中假阳性(FP)被称为第一类错误,假阴性(FN)被称为第二类错误。

有:

, ,

∙\bullet∙精确率描述的是真预测中有多少被实际证明是真的。

精确率=TPTP+FP\frac{TP}{TP+FP}TP+FPTP​

∙\bullet∙准确率度量描述的是整个数据集中有多少预测是正确的。

准确率=TP+TN总数\frac{TP+TN}{总数}总数TP+TN​

∙\bullet∙召回率度量描述的是实际为真的点中有多少预测为真。

召回率=TPTP+FN\frac{TP}{TP+FN}TP+FNTP​

在此基础上,可以推出更多的值。

∙\bullet∙F1分数是精确率和召回率的调和平均值。这个度量指标可以告诉我们模型的准确程度,因为它既考虑了模型对多少实际为真的数据点做出真预测,也考虑了模型对真预测总数中的多少做出了正确预测。

F1分数=2∗精确率∗召回率精确率+召回率\frac{2*精确率*召回率}{精确率+召回率}精确率+召回率2∗精确率∗召回率​

∙\bullet∙真阳性率(TPR) = 召回率 = 灵敏度。与召回率一样,TPR告诉我们有多少实际为真的数据点被模型预测为真。

∙\bullet∙ 假阳性率(FPR) 告诉我们有多少实际为假的数据点被模型预测为阳性。此公式与召回率类似,但它不是真阳性与所有真数据点的比率,而是假阳性与假数据点的比率。

FPR=1−特效度=FPFP+TNFPR=1-特效度=\frac{FP}{FP+TN}FPR=1−特效度=FP+TNFP​

∙\bullet∙特效度 与召回率非常相似,它告诉我们有多少实际为假的数据点被模型预测为假。

特效度=1−FPR=TNTN+FP特效度=1-FPR=\frac{TN}{TN+FP}特效度=1−FPR=TN+FPTN​

4. ROC曲线

ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”,顾名思义,其主要的分析方法就是画这条特征曲线。在机器学习领域用来评判分类、检测结果的好坏

ROC曲线的绘制步骤如下:
(1)假设已经得出一系列样本被划分为正类的概率Score值,按照大小排序。

(2)从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于某个样本,其“Score”值为0.6,那么“Score”值大于等于0.6的样本都被认为是正样本,而其他样本则都认为是负样本。

(3)每次选取一个不同的threshold,得到一组FPR和TPR,以FPR值为横坐标和TPR值为纵坐标,即ROC曲线上的一点。

(4)根据3中的每个坐标点,画图。

ROC曲线绘制实例

(1)分析数据

y_true = [0, 0, 1, 1];scores = [0.1, 0.4, 0.35, 0.8];

(2)列表

(3)将截断点依次取为score值,计算TPR和FPR

当截断点为0.1时:

说明只要score>=0.1,它的预测类别就是正例。 因为4个样本的score都大于等于0.1,所以,所有样本的预测类别都为P。

scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [1, 1, 1, 1];

正例与反例信息如下:

由此可得:
TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 1;

当截断点为0.35时:
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 1, 1];
正例与反例信息如下:

由此可得:
TPR = TP/(TP+FN) = 1; FPR = FP/(TN+FP) = 0.5;

当截断点为0.4时:
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 1, 0, 1];
正例与反例信息如下:

由此可得:
TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0.5;

当截断点为0.8时:
scores = [0.1, 0.4, 0.35, 0.8];y_true = [0, 0, 1, 1];y_pred = [0, 0, 0, 1];

正例与反例信息如下:

由此可得:
TPR = TP/(TP+FN) = 0.5; FPR = FP/(TN+FP) = 0;

(4)根据TPR、FPR值,以FPR为横轴,TPR为纵轴画图。

5. 用sklearn的内置函数绘制ROC曲线

def roc_curve(y_true, y_score, *, pos_label=None, sample_weight=None,drop_intermediate=True):

输入参数:

y_true:真实二分类的标签
y_score:样本被分类为正类的概率
pos_label:正类标签值。如果使用[-1,1]或者[0,1]来标记负类和正类的话则不需要设置pos_label,否则需要设置pos_label来告诉代码我们设定的正类是什么。比如用[1,2]来标记负类和正类,则需要设置pos_label=2

返回值:

fpr: 假阳率。
tpr :真阳率。
thresholds:阈值。

例子:

计算部分

>>> import numpy as np
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
>>> fpr
array([0. , 0. , 0.5, 0.5, 1. ])
>>> tpr
array([0. , 0.5, 0.5, 1. , 1. ])
>>> thresholds
array([1.8 , 0.8 , 0.4 , 0.35, 0.1 ])

在这个例子中标签1代表负类标记,2代表正类标记。
对于每一个阈值(threshold),都会计算出该阈值对应的假阳率(fpr)和真阳率(tpr)。阈值是从大往小设置的。具体计算如下:

(1)threshold=1.8时,scores小于1.8的样本都会被判定为负类,大于等于1.8的被判定为正类,此时TN=2,FN=2,TP=0,FP=0,根据第3节中的计算方法,fpr=0,tptr=0;

(2)threshold=0.8时,scores小于0.8的样本都会被判定为负类,大于等于0.8的被判定为正类,此时TN=2,FN=1,TP=1,FP=0,根据第3节中的计算方法,fpr=0,tptr=0.5;

(3)threshold=0.4时,scores小于0.4的样本都会被判定为负类,大于等于0.4的被判定为正类,此时TN=1,FN=1,TP=1,FP=1,根据第3节中的计算方法,fpr=0.5,tptr=0.5;

(4)threshold=0.35时,scores小于0.35的样本都会被判定为负类,大于等于0.35的被判定为正类,此时TN=1,FN=0,TP=2,FP=1,根据第3节中的计算方法,fpr=0.5,tptr=1;

(5)threshold=0.1时,scores小于0.1的样本都会被判定为负类,大于等于0.1的被判定为正类,此时TN=0,FN=0,TP=2,FP=2,根据第3节中的计算方法,fpr=1,tptr=1;

绘制部分:

import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
plt.plot(fpr, tpr, color='darkorange')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.show()

6. AUC(Area Under Curve)

AUC表示ROC曲线下的面积,主要用于衡量模型的泛化性能,即分类效果的好坏。AUC是衡量二分类模型优劣的一种评价指标,表示正例排在负例前面的概率。一般在分类模型中,预测结果都是以概率的形式表现,如果要计算准确率,通常都会手动设置一个阈值来将对应的概率转化成类别,这个阈值也就很大程度上影响了模型准确率的计算。

之所以采用AUC来评价,主要还是考虑到ROC曲线本身并不能直观的说明一个分类器性能的好坏,而AUC值作为一个数量值,具有可比较性,可以进行定量的比较。

AUC值的计算方法:
∙\bullet∙将坐标点按照横坐标FPR排序 。
∙\bullet∙计算第 i i i个坐标点和第 i + 1 i+1 i+1个坐标点的间距 d x dx dx 。
∙\bullet∙ 获取第 i i i或者 i + 1 i+1 i+1个坐标点的纵坐标y。
∙\bullet∙ 计算面积微元 d s = y d x ds=ydx ds=ydx。
∙\bullet∙ 对面积微元进行累加,得到AUC。

AUC值对模型性能的判断标准:
(1) AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。

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

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

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

7. 用sklearn的内置函数计算AUC值

参考

精确率、准确率、召回率、ROC、AUC的概念,计算方式和代码实现相关推荐

  1. 一文详尽混淆矩阵、准确率、精确率、召回率、F1值、P-R 曲线、ROC 曲线、AUC 值、Micro-F1 和 Macro-F1

    文章目录 二分类的评价指标 一.混淆矩阵与 TP.TN.FP.FN 二.准确率.精确率.召回率.F1值 三.P-R 曲线 四.ROC 曲线.AUC 值 五.P-R曲线和ROC曲线有什么区别,如何选择? ...

  2. AUC值越大_模型评价——准确率、精确率与召回率与F值、宏平均与微平均、ROC曲线与AUC值...

    在上一篇文章中(baiziyu:模型评价--训练误差与测试误差.过拟合与欠拟合.混淆矩阵)主要介绍了模型评价涉及的基本概念,本节给出一些常用的评价指标.这些指标大致可以分为三类,第一大类是普通的准确率 ...

  3. 准确率、精确率、召回率、F1-score、TPR、FPR、ROC曲线、AUC

    1.分类评估方法 1.1精确率与召回率 1.3.分类评估报告api sklearn.metrics.classification_report(y_true, y_pred, labels=[], t ...

  4. 精确率、召回率、F1 值、ROC、AUC

    首先我们来思考一个问题,如何评估一个机器学习模型效果的好坏呢? 1.性能度量 机器学习首先要建模,对于模型性能的好坏(即模型的泛化能力),我们必须有个评判的标准.为了了解模型的泛化能力,我们需要用某个 ...

  5. 机器学习分类问题指标评估内容详解(准确率、精准率、召回率、F1、ROC、AUC等)

    文章目录 前言 一.混淆矩阵(confusion matrix) 二.准确率,精准率,召回率,F1分数 1. 准确率(Accuracy) 2. 精确率(Precision) 3. 召回率(Recall ...

  6. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

  7. 机器学习性能指标精确率、召回率、F1值、ROC、PRC与AUC

    精确率.召回率.F1.AUC和ROC曲线都是评价模型好坏的指标,那么它们之间有什么不同,又有什么联系呢.下面让我们分别来看一下这几个指标分别是什么意思. 针对一个二分类问题,将实例分成正类(posti ...

  8. 【20210914】【机器/深度学习】模型评价指标:精确率、召回率、特异性、敏感性、F1-score、ROC曲线、AUC

    一.区分精确率.召回率和特异性.敏感性 在数据科学中,查看精确率和召回率来评估构建的模型是十分常见的.而在医学领域,通常使用特异性和敏感性来评估医学测试.这一点在兆观的论文.以及 xxx院的沟通过程中 ...

  9. 机器学习分类模型中的评价指标介绍:准确率、精确率、召回率、ROC曲线

    文章来源:https://blog.csdn.net/wf592523813/article/details/95202448 1 二分类评价指标 准确率,精确率,召回率,F1-Score, AUC, ...

  10. auc计算公式_图解机器学习的准确率、精准率、召回率、F1、ROC曲线、AUC曲线

    机器学习模型需要有量化的评估指标来评估哪些模型的效果更好. 本文将用通俗易懂的方式讲解分类问题的混淆矩阵和各种评估指标的计算公式.将要给大家介绍的评估指标有:准确率.精准率.召回率.F1.ROC曲线. ...

最新文章

  1. 一文看懂国产最大深度学习平台上新,国内率先加持量子机器学习
  2. Spring定时任务的几种实现方式
  3. 模块pdf2image.dll加载失败_Webpack 原理从前端模块化开始
  4. 计算机网络学习笔记(七)——传输层、TCP三次握手、四次挥手、TCP流量控制、大总结
  5. mongoose换成mysql_Package - tms-koa
  6. 更新yum源却忘了生成缓存 造成每次启动机器报:the package list needs to be rebuilt...
  7. C#中xml序列化域反序列化
  8. java笔记:SpringSecurity应用(二)
  9. Origin 在新打开的工作区添加列
  10. 关于使用电脑命令开启无线热点的那点事。。。
  11. 嵌入式单片机基础篇(二十三)之串口通信
  12. win7背景颜色设置为淡绿色
  13. win10电脑桌面透明便签_DesktopNoteOK桌面便签小工具下载|windows10桌面透明便签插件_最火软件站...
  14. 测试不同体重体型软件样子的,hikaku-sitatter身高软件,一键测试自己的体型
  15. 【autojs】Auto.js Pro安卓QQ语音红包秒抢挂免费脚本源码
  16. 自动打开html网页脚本,开启网页全屏插件(自动开启网页全屏脚本js插件)
  17. 10.HTML标题标记
  18. 乱弹琴20140421
  19. cml sml区别_CML与SML有何联系和区别?
  20. PHP之MySQL笔记4

热门文章

  1. VS.Net 2005 下载地址
  2. 笔记本计算机摄像头怎么打开方式,笔记本的摄像头怎么打开,手把手教你笔记本电脑摄像头如何打开...
  3. python股票量化交易(4)---金叉与死叉
  4. WPS-word使用多级编号级联
  5. Sketch for Mac(矢量绘图工具)
  6. micro/微店API接口(item_search-根据关键词取商品列表)
  7. springboot+vue+elementUI springboot地方废物回收机构管理系统-#毕业设计
  8. 百度地图、腾讯地图坐标转换
  9. HTML学习之制作导航网页
  10. 批量修改excel表格的名字(无需编程经验)