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实现 - 一蓑烟雨 - ****博客
参考代码: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)。
在 "真故障" 车中有多少 "我觉得有故障".
但是这和 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和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值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
为什么使用Roc和Auc评价分类器
既然已经这么多标准,为什么还要使用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曲线(示意图,不对应上面数据):
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.****.net/taoyanqi8932/article/details/54409314
5.https://blog.****.net/teminusign/article/details/51982877
6. https://blog.****.net/b876144622/article/details/80009867
7. https://blog.****.net/gslzszj/article/details/71056667 (非常好!)
ROC曲线,PR曲线,F1值和AUC概念解释及举例说明