Datawhale《深度学习-NLP》Task1- 召回率、准确率、ROC曲线、AUC、PR曲线学习理解

Task1 数据集探索

1. 数据集

数据集:中、英文数据集各一份 中文数据集:THUCNews THUCNews数据子集:https://pan.baidu.com/s/1hugrfRu 密码:qfud

英文数据集:IMDB数据集 Sentiment Analysis

2. IMDB数据集下载和探索

参考TensorFlow官方教程:影评文本分类  |  TensorFlow

科赛 - Kesci.com

 

3. THUCNews数据集下载和探索 参考博客中的数据集部分和预处理部分:CNN字符级中文文本分类-基于TensorFlow实现 - 一蓑烟雨 - CSDN博客

参考代码:text-classification-cnn-rnn/cnews_loader.py at mas...

4. 学习召回率、准确率、ROC曲线、AUC、PR曲线这些基本概念

参考1:机器学习之类别不平衡问题 (2) —— ROC和PR曲线_慕课手记

 

1. 召回率,准确率,精确率:

准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70%,大白话:“你的预测有多少是对的”
精确率(precision) = TP/(TP+FP) = 80%  “在你认为正例里面,有多少是真的正例?” 或者 “在你认为有故障的里面,有多少是真有故障的” (针对你认为认为正例的)
召回率(recall) = TP/(TP+FN) = 2/3,大白话:“正例里你的预测覆盖了多少” 或者“在真故障中,你预测对并召回了多少?” (针对真故障的)

召回率:

召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
R = \frac{TP}{TP+FN}

在 "真故障" 车中有多少 "我觉得有故障".

但是这和 recall, 召回有半毛钱关系? 后来我想了想, 还是有点关系的. 生产完成后,有些没检测出来的问题车(False Negative)也卖给客人了. 有一天发现问题要召回FN的车. 怎么看这个比例呢?

按"召回"的字面意思可以是:

  • 召回率 = 召回 / 真故障 = FN / (TP+FN)

但是实际却是:

  • 召回率 = 1 - (召回/真故障) = 1 - FN / (TP+FN) = TP/(TP+FN)

也就是:

  • 召回率 = (我觉得故障 中的 真故障) / 故障 = TP/(TP+FN)

准确率

更准确应该称为"正确率"或"精准率" (Precision)

在 "我觉得故障" 的车中有多少 "真故障". (So far so good)

  • 准确率 = (我觉得故障 中的 真故障) / 我觉得故障 = TP/(TP+FP).
  •  

精确率

精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
P  = \frac{TP}{TP+FP}

 

P和N是什么含义:

我开了条汽车生产线. "有故障"比较少, 所以是 Positive (真有故障). 正常是 Negative (没故障).

T: True, F: False, P: Positive, N: Negative

TP: 预测为正,实际为正

FP: 预测为正,实际为负

TN:预测为负,实际为负

FN: 预测为负,实际为正

参考:

针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况.

(1)若一个实例是正类并且被预测为正类,即为真正类(True Postive TP)

(2)若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)

(3)若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)

(4)若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)

TP:正确的肯定数目

FN:漏报,没有找到正确匹配的数目

FP:误报,没有的匹配不正确

TN:正确拒绝的非匹配数目

列联表如下,1代表正类,0代表负类:

由上表可得出横,纵轴的计算公式:

(1)真正类率(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例。Sensitivity

(2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。1-Specificity

(3)真负类率(True Negative Rate)TNR: TN/(FP+TN),代表分类器预测的负类中实际负实例占所有负实例的比例,TNR=1-FPR。Specificity


2. ROC曲线

历史:ROC曲线首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。数十年来,ROC分析被用于医学无线电生物学犯罪心理学领域中,而且最近在机器学习(machine learning)和数据挖掘(data mining)领域也得到了很好的发展。

在做决策时,ROC分析能不受成本/效益的影响,给出客观中立的建议。

roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。

 

(1)真正类率(或称召回率)(True Postive Rate)TPR: TP/(TP+FN),代表分类器预测的正类中实际正实例占所有正实例的比例。Sensitivity

(2)负正类率(False Postive Rate)FPR: FP/(FP+TN),代表分类器预测的正类中实际负实例占所有负实例的比例。1-Specificity

(3)真负类率(True Negative Rate)TNR: TN/(FP+TN),代表分类器预测的负类中实际负实例占所有负实例的比例,TNR=1-FPR。Specificity

 

横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;(1-Specificity)

纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆盖率)

 

假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1)。

如下面这幅图,(a)图中实线为ROC曲线,线上每个点对应一个阈值。

 

横轴FPR:1-TNR,1-Specificity,FPR越大,预测正类中实际负类越多。

纵轴TPR:Sensitivity(正类覆盖率),TPR越大,预测正类中实际正类越多。

理想目标:TPR=1,FPR=0,即图中(0,1)点,故ROC曲线越靠拢(0,1)点,越偏离45度对角线越好,Sensitivity、Specificity越大效果越好。

 如何画roc曲线

假设已经得出一系列样本被划分为正类的概率,然后按照大小排序,下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。

接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。这样一来,我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:

  

AUC(Area under Curve):Roc曲线下的面积,介于0.1和1之间。Auc作为数值可以直观的评价分类器的好坏,值越大越好。

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

 

为什么使用RocAuc评价分类器

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

在上图中,(a)和(c)为Roc曲线,(b)和(d)为Precision-Recall曲线。

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

ROC曲线评价统计量计算。ROC曲线下的面积值在1.0和0.5之间。在AUC>0.5的情况下,AUC越接近于1,说明诊断效果越好。AUC在 0.5~0.7时有较低准确性,AUC在0.7~0.9时有一定准确性,AUC在0.9以上时有较高准确性。AUC=0.5时,说明诊断方法完全不起作用,无诊断价值。AUC<0.5不符合真实情况,在实际中极少出现。

PR曲线

P、R


P(查准率):P=TPTP+FPP=TPTP+FP   即预测结果中真正的正例的比例。 
R(查全率):R=TPTP+FNR=TPTP+FN    即所有正例中被正确预测出来的比例。 

P-R 曲线: 
在机器学习中分类器往往输出的不是类别标号,而是属于某个类别的概率值,根据分类器的预测结果从大到小对样例进行排序,逐个把样例加入正例进行预测,算出此时的P、R值。

如上图: 
真实情况正例反例各有10个。 
先用分数(score):0.9作为阈值(大于等于1为正例,小于1为反例),此时TP=1,FP=0,FN=9,故P=1,R=0.1。 
用0.8作为阈值,P=1,R=0.2。 
用0.7作为阈值,P=0.67,R=0.2。 
用0.6作为阈值,P=0.75,R=0.3。 
以此类推。。。 
最后得到一系列P、R值序列,就画出P-R曲线(示意图,不对应上面数据):
1

P-R 曲线越靠近右上角性能越好。

F1=2×P×RP+RF1=2×P×RP+R    F1值综合考虑了P值和R值。 
P、R和F1评价在信息检索中用的比较多,在机器学习中还有一种ROC曲线来评价性能。

 

参考:

1. https://www.zhihu.com/question/19645541/answer/360727092

2.https://zh.wikipedia.org/wiki/ROC%E6%9B%B2%E7%BA%BF

3.https://www.cnblogs.com/dlml/p/4403482.html

4.https://blog.csdn.net/taoyanqi8932/article/details/54409314

5.https://blog.csdn.net/teminusign/article/details/51982877

6. https://blog.csdn.net/b876144622/article/details/80009867

7. https://blog.csdn.net/gslzszj/article/details/71056667 (非常好!)

ROC曲线,PR曲线,F1值和AUC概念解释及举例说明

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值