继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Precision, Recall, F-score, ROC, AUC

青春有我
关注TA
已关注
手记 1199
粉丝 205
获赞 1008

一、正样本和负样本

正样本就是使系统得出正确结论的例子,负样本相反。
比如你要从一堆猫狗图片中检测出狗的图片,那么狗就是正样本,猫就是负样本;反过来你若是想检测出猫的图片,那么猫就是正样本,狗就是负样本。

二、FN, FP, TN, TP

FN:False Negative,被判定为负样本,但事实上是正样本。也叫假阴性。
FP:False Positive,被判定为正样本,但事实上是负样本。也叫假阳性。
TN:True Negative,被判定为负样本,事实上也是负样本。也叫真阴性。
TP:True Positive,被判定为正样本,事实上也是证样本。也叫真阳性。

这四个其实很好区分,看字面意义就可以了:
False Negative,假的负样本,顾名思义事实上是正样本。
False Positive,假的正样本,顾名思义事实上是负样本。
True Negative,真的负样本,顾名思义事实上是负样本。
True Positive,真的正样本,顾名思义事实上是正样本。

三、Precision, Recall和F-score

Precision:查准率,即在检索后返回的结果中,真正正确的个数占整个结果的比例。
公式:P = TP / (TP + FP)

Recall:查全率,即在检索结果中真正正确的个数,占整个数据集(检索到的和未检索到的)中真正正确个数的比例
公式:R = TP / (TP + FN)

F score,也叫F measure,是两个判断依据的权衡,用一个标准来衡量系统性能。
公式:F = 2 * P * R / (P + R)

例1

有个班级,有50个男生,30个女生。
有个人猜测这个班有20个女生,事实上他所猜测的这20个女生中,有15个真的是女生,另5个是男生。
则:
P = 15 / 20 = 75%
R = 15 / 30 = 50%
F = 2 * 75% * 50% / (75% + 50%) = 60%

四、真阳性率/真阴性率/假阴性率/假阳性率

真阳性率(True Positive Rate,TPR),也叫灵敏度(Sensitivity)或召回率(Recall)
Sensitivity = Recall = TPR = TP / (TP + FN)

真阴性率(True Negative Rate,TNR),也叫特异度(Specificity)
Specificity = TNR = TN / (TN + FP)

假阴性率(False Negative Rate,FNR),也叫漏诊率( = 1 - 灵敏度)
FNR = FN / (FN + TP)

假阳性率(False Positive Rate,FPR),也叫误诊率( = 1 - 特异度)
FPR = FP / (FP + TN)

阳性似然比 = 真阳性率 / 假阳性率 = 灵敏度 / (1 - 特异度)

阴性似然比 = 假阴性率 / 真阴性率 = (1 - 灵敏度) / 特异度

Youden(约登)指数 = 灵敏度 + 特异度 - 1 = 真阳性率 - 假阳性率

五、ROC

(一)定义

ROC(Receiver Operating Characteristic)曲线全称是“受试者工作特征”,通常用来衡量一个二分类学习器的好坏。如果一个学习器的ROC曲线能将另一个学习器的ROC曲线完全包住,则说明该学习器的性能优于另一个学习器。

(二)如何画ROC曲线

对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值,这又是如何得到的呢?
实际上对于许多学习器在判定二分类问题时是预测出一个对于真值的范围在[0.0, 1.0]之间的概率值,而判定是否为真值则看该概率值是否大于或等于设定的阈值(Threshold)。例如如果阈值设定为0.5则所有概率值大于或等于0.5的均为正例,其余为反例。因此对于不同的阈值我们可以得到一系列相应的FPR和TPR,从而绘制出ROC曲线。

例2

y_true = [0, 1, 0, 1],真实值
y_score = [0.1, 0.35, 0.4, 0.8], 预测概率值
分别取4组判定正例用的阈值:[0.1, 0.35, 0.4, 0.8],可得相应4组FPR,TPR:
(1)threshold = 0.1时,由y_score得到的预测值y_pred = [1, 1, 1, 1]
TP = 2, FP = 2, TN = 0,FN = 0
横坐标FPR = FP / (FP + TN) = 1
纵坐标TPR = TP / (TP + FN) = 1
(2)threshold = 0.35时,y_pred= [0, 1, 1, 1]
TP = 2, FP = 1, TN = 1, FN = 0
FPR = FP / (FP + TN) = 0.5
TPR = TP / (TP + FN) = 1
(3)threshold = 0.4时,y_pred= [0, 0, 1, 1]
TP = 1, FP = 1, TN = 1, FN = 1
FPR = FP / (FP + TN) = 0.5
TPR = TP / (TP + FN) = 0.5
(4)threshold = 0.8时,y_pred= [0, 0, 0, 1]
TP = 1, FP = 0, TN = 2, FN = 1
FPR = FP / (FP + TN) = 0
TPR = TP / (TP + FN) = 0.5

绘制ROC曲线图如下:

webp

1.png

例3

有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。如下图所示:

webp

2.png

接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点。
具体计算过程如下:
真实值:[1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0]
(1) score = 0.9时,预测值:[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
TP = 1, FP = 0, TN = 10, FN = 9
FPR = FP / (FP + TN) = 0
TPR = TP / (TP + FN) = 0.1
(2) score = 0.8时,预测值:[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
TP = 2, FP = 0, TN = 10, FN = 8
FPR = FP / (FP + TN) = 0
TPR = TP / (TP + FN) = 0.2
(3) score = 0.7时,预测值:[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
TP = 2, FP = 1, TN = 9, FN = 8
FPR = FP / (FP + TN) = 0.1
TPR = TP / (TP + FN) = 0.2
……
(19)score = 0.3时, 预测值:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0]
TP = 10, FP = 9, TN = 1, FN = 0
FPR = FP / (FP + TN) = 0.9
TPR = TP / (TP + FN) = 1
(20)score = 0.1时, 预测值:[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
TP = 10, FP = 10, TN = 0, FN = 0
FPR = FP / (FP + TN) = 1
TPR = TP / (TP + FN) = 1

当我们将threshold设置为1和0时,分别可以得到ROC曲线上的(0,0)和(1,1)两个点。
(21)score = 1时,预测值:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
TP = 0, FP = 0, TN = 10, FN = 10
FPR = FP / (FP + TN) = 0
TPR = TP / (TP + FN) = 0
(22)score = 0与score = 0.1的结果一样

这样一来,我们一共得到了22组FPR和TPR的值,将这些(FPR,TPR)对连接起来,就得到了ROC曲线,如下图所示:

webp

3.png

当threshold取值越多,ROC曲线越平滑。

其实,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。

六、AUC

(一)AUC的计算

AUC (Area Under Curve) 被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围一般在0.5和1之间。
例 2中的AUC值为0.75

(二)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 < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

三种AUC值示例:

webp

4.png

七、为什么使用ROC曲线

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

webp

5.png

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



作者:海天一树X
链接:https://www.jianshu.com/p/b20347b95919

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP