-
2022-03-10 19:35:25
ROC概念
在信号检测理论中,接收者操作特征曲线,或者叫ROC曲线(Receiver operating characteristic curve),用于选择最佳的信号侦测模型、舍弃次佳的模型或者在同一模型中设置最佳阈值。最近在机器学习领域也得到了很好的发展。
ROC分析的是二元分类模型,也就是输出结果只有两种类别的模型,例如(阴性/阳性),(垃圾邮件/非垃圾邮件)混淆矩阵
ROC 空间
ROC空间将伪阳率(FPR)定义为X轴,将真阳率(TPR)定义为y轴,从(0,0)到(1,1)的对角线将ROC空间划分为左上/右下两个区域,在这条线的以上的点代表了一个好的分类结果(胜过随机分类),而在这条线以下的点代表了差的分类结果(劣于随机分类)。
完美的预测是一个在左上角的点,在ROC空间座标 (0,1)点,X=0 代表着没有伪阳性,Y=1 代表着没有伪阴性(所有的阳性都是真阳性);也就是说,不管分类器输出结果是阳性或阴性,都是100%正确。一个随机的预测会得到位于从 (0, 0) 到 (1, 1) 对角线(也叫无识别率线)上的一个点;最直观的随机预测的例子就是抛硬币。
ROC曲线
将同一二分类模型每个阈值的 (FPR, TPR) 坐标都画在ROC空间里,就成为特定模型的ROC曲线。
在同一个分类器之内,阈值的不同设置对ROC曲线的影响,有一定规律可循:- 当阈值设置为最高时,亦即所有样本都被预测为阴性,没有样本被预测为阳性,此时在伪阳性率 FPR = FP / ( FP + TN ) 算式中的 FP = 0,所以 FPR = 0%。同时在真阳性率(TPR)算式中, TPR = TP / ( TP + FN ) 算式中的 TP = 0,所以 TPR = 0%
当阈值设置为最高时,必得出ROC坐标系左下角的点 (0, 0)。 - 当阈值设置为最低时,亦即所有样本都被预测为阳性,没有样本被预测为阴性,此时在伪阳性率FPR = FP / ( FP + TN ) 算式中的 TN = 0,所以 FPR = 100%。同时在真阳性率 TPR = TP / ( TP + FN ) 算式中的 FN = 0,所以 TPR=100%
当阈值设置为最低时,必得出ROC坐标系右上角的点 (1, 1)。 - 因为TP、FP、TN、FN都是累积次数,TN和FN随着阈值调低而减少(或持平),TP和FP随着阈值调低而增加(或持平),所以FPR和TPR皆必随着阈值调低而增加(或持平)。
随着阈值调低,ROC点 往右上(或右/或上)移动,或不动;但绝不会往左下(或左/或下)移动。
AUC
ROC曲线下方的面积(Area under the Curve of ROC AUC ROC)
AUC计算公式
假设数据集共有M个正样本,N个负样本,预测值也就是M+N个。首先将所有样本按照预测值进行从小到大的排序,并排序编号由1到M+N
- 对于正样本概率最大的,假设排序编号为 r a n k 1 rank_{1} rank1,比它概率小的负样本个数= r a n k 1 rank_{1} rank1 - M;
- 对于正样本概率第二大的,假设排序编号为 r a n k 2 rank_{2} rank2,比它概率小的负样本个数= r a n k 1 rank_{1} rank1 - (M-1);
- …
- 对于正样本概率最小的,假设排序编号为
r
a
n
k
M
rank_{M}
rankM,比它概率小的负样本个数=
r
a
n
k
1
rank_{1}
rank1 - (M-1);
所以在所有情况下,正样本打分大于负样本的个数为:
r a n k 1 rank_{1} rank1 + r a n k 2 rank_{2} rank2 + r a n k M rank_{M} rankM -(1+2+…+M)
A U C = ∑ i ∈ p o s i t i v e C l a s s r a n k i − M ( 1 + M ) 2 M ∗ N AUC = \frac{\sum_{i\in positiveClass}rank_{i}- \frac{M(1+M)}{2}}{M*N} AUC=M∗N∑i∈positiveClassranki−2M(1+M)
AUC意义
由计算公式可知,AUC越大,说明分类器越可能把正样本排在前面,衡量的是一种排序的性能。
如果ROC面积越大,说明曲线越往左上角靠过去。那么对于任意截断点,(FPR,TPR)坐标点越往左上角(0,1)靠,说明FPR较小趋于0(根据定义得知,就是在所有真实负样本中,基本没有预测为正的样本),TRP较大趋于1(根据定义得知,也就是在所有真实正样本中,基本全都是预测为正的样本)。并且上述是对于任意截断点来说的,很明显,那就是分类器对正样本的打分基本要大于负样本的打分(一般预测值也叫打分),衡量的不就是排序能力嘛!
所以AUC含义即为:随机从正样本和负样本中各选一个,分类器对于该正样本打分大于该负样本打分的概率。
AUC优缺点
优点:
● AUC衡量的是一种排序能力,因此特别适合排序类业务;
● AUC对正负样本均衡并不敏感,在样本不均衡的情况下,也可以做出合理的评估。
● 其他指标比如precision,recall,F1,根据区分正负样本阈值的变化会有不同的结果,而AUC不需要手动设定阈值,是一种整体上的衡量方法。缺点:
● 忽略了预测的概率值和模型的拟合程度;
● AUC反应了太过笼统的信息。无法反应召回率、精确率等在实际业务中经常关心的指标;
● 它没有给出模型误差的空间分布信息,AUC只关注正负样本之间的排序,并不关心正样本内部,或者负样本内部的排序,这样我们也无法衡量样本对于好坏客户的好坏程度的刻画能力;GAUC
AUC反映的是整体样本间的一个排序能力,但是无法从更加个性化的角度进行分析。推荐系统本身是针对不同用户进行个性化推荐,因此有时候我们在进行分析的时候不能只看整体的AUC。GAUC是AUC的改进版,将样本进行分组后,在组内计算AUC。
GAUC在单个用户AUC的基础上,按照点击次数或展示次数进行加权平均,消除了用户偏差对模型的影响:
G A U C = ∑ i = 1 n w i ∗ A U C i ∑ i = 1 n w i GAUC=\frac{\sum_{i=1}^{n}w_{i}*AUC_{i}}{\sum_{i=1}^{n}w_{i}} GAUC=∑i=1nwi∑i=1nwi∗AUCi实际处理时权重一般可以设为每个用户view的次数,或click的次数,而且一般计算时,会过滤掉单个用户全是正样本或负样本的情况。
更多相关内容 - 当阈值设置为最高时,亦即所有样本都被预测为阴性,没有样本被预测为阳性,此时在伪阳性率 FPR = FP / ( FP + TN ) 算式中的 FP = 0,所以 FPR = 0%。同时在真阳性率(TPR)算式中, TPR = TP / ( TP + FN ) 算式中的 TP = 0,所以 TPR = 0%
-
利用Python画ROC曲线和AUC值计算
2020-12-23 21:13:59这篇文章将先简单的介绍ROC和AUC,而后用实例演示如何python作出ROC曲线图以及计算AUC。 AUC介绍 AUC(Area Under Curve)是机器学习二分类模型中非常常用的评估指标,相比于F1-Score对项目的不平衡有更大的容忍性,... -
机器学习(四)ROC 和 AUC
2022-01-30 16:50:23ROC 和 AUC AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"。 ROC 曲线由两个变量TPR和...ROC 和 AUC
AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"。
ROC
曲线由两个变量TPR和FPR组成,这个组合以FPR对TPR,即是以代价(costs)对收益(benefits)。
-
x轴为假阳性率(FPR):在所有的负样本中,分类器预测错误的比例
F P R = F P F P + T N FPR = \frac {FP}{FP+TN} FPR=FP+TNFP
-
y轴为真阳性率(TPR):在所有的正样本中,分类器预测正确的比例(等于Recall)
T P R = T P T P + F N TPR = \frac {TP}{TP+FN} TPR=TP+FNTP
为了更好地理解ROC曲线,我们使用具体的实例来说明:
如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是指标FPR,要越低越好。
不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的tpr指标应该会很高,但是fpr指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么tpr达到1,fpr指标也为1。
我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。
我们可以看出,左上角的点(FPR=0,TPR=1),为完美分类,也就是这个医生医术高明,诊断全对。点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。**上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到ROC曲线。**曲线距离左上角越近,证明分类器效果越好
AUC
AUC定义:
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
AUC的物理意义
AUC的物理意义正样本的预测结果大于负样本的预测结果的概率。所以AUC反应的是分类器对样本的排序能力。
另外值得注意的是,AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
下面从一个小例子解释AUC的含义:小明一家四口,小明5岁,姐姐10岁,爸爸35岁,妈妈33岁建立一个逻辑回归分类器,来预测小明家人为成年人概率,假设分类器已经对小明的家人做过预测,得到每个人为成人的概率。
例子中并不关注小明是不是成人,而关注的是,预测为成人的概率的排序。
**问题①:**以下为三种模型的输出结果,求三种模型的AUC。
小明 姐姐 妈妈 爸爸 a 0.12 0.35 0.76 0.85 b 0.12 0.35 0.44 0.49 c 0.52 0.65 0.76 0.85 AUC只与概率的相对大小(概率排序)有关,和绝对大小没关系。由于三个模型概率排序的前两位都是未成年人(小明,姐姐),后两位都是成年人(妈妈,爸爸),因此三个模型的AUC都等于1。
AUC只关注正负样本之间的排序,并不关心正样本内部,或者负样本内部的排序。这也体现了AUC的本质:任意个正样本的概率都大于负样本的概率的能力
例子中AUC只需要保证(小明和姐姐)(爸爸和妈妈),小明和姐姐在前2个排序,爸爸和妈妈在后2个排序,而不会考虑小明和姐姐谁在前,或者爸爸和妈妈谁在前。
**问题②:**以下已经对分类器输出概率从小到大进行了排列,哪些情况的AUC等于1, 哪些情况的AUC为0(其中背景色表示True value,红色表示成年人,蓝色表示未成年人)。
D 模型, E模型和F模型的AUC值为1,C模型的AUC值为0
AUC的计算:
-
法1:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积(曲线)之和。计算的精度与阈值的精度有关。
-
法2:根据AUC的物理意义,我们计算正样本预测结果大于负样本预测结果的概率。取
n1*n0
(n1为正样本数,n0为负样本数)个二元组,比较score(预测结果),最后得到AUC。时间复杂度为O(N*M)
。 -
法3:我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n (n=n0+n1,其中n0为负样本个数,n1为正样本个数),其次为n-1。那么对于正样本中rank最大的样本,rank_max,有n1-1个其他正样本比他score小,那么就有(rank_max-1)-(n1-1)个负样本比他score小。其次为(rank_second-1)-(n1-2)。最后我们得到正样本大于负样本的概率为
A U C = ∑ 正 样 本 r a n k ( s c o r e ) − n 1 ∗ ( n 1 + 1 ) 2 n 0 ∗ n 1 AUC=\frac{\sum_{正样本}{rank(score)}-\frac{{n_1}*({n_1}+1)}{2}}{n_0*n_1} AUC=n0∗n1∑正样本rank(score)−2n1∗(n1+1)
下面说明如何利用ROC曲线下的面积求解AUC。
- 阈值取值的含义:
比如阈值取0.9,即将模型输出概率大于等于0.9的样本预测为正例,将模型输出概率小于0.9的样本预测为负例
- 阈值不同取值与真正例率(TPR)和假正例率(FPR)的关系:
阈值取1,真正例率(正样本预测正确):0(因为爸爸、妈妈都预测错误了),假正例率(负样本预测错误):0(小明和姐姐都没有预测错误)
阈值取0.9,即将大于0.9的概率预测为正例,小于 0.9的概率预测为负例,所以真正例率(正样本预测正确):50%(爸爸预测正确,妈妈预测错误),假正例率(负样本预测错误):0
阈值取0.75,真正例率:50%(爸爸预测正确,妈妈预测错误),假正例率:50%(小明预测正确,姐姐预测错误)
阈值取0.36,真正例率:1(爸爸、妈妈都预测正确),假正例率:50%(小明预测正确,姐姐预测错误)
阈值取0.18,真正例率:1(爸爸、妈妈都预测正确),假正例率:1(小明和姐姐都预测错误)
阈值取0,真正例率:1(爸爸、妈妈都预测正确),假正例率:1(小明和姐姐都预测错误)
经过观察,发现ROC曲线下的面积AUC值为0.5;
下面有一个简单的例子说明如何利用方法三求解AUC:
-
真实标签为 (1, 0, 0, 1, 0)
-
预测结果1(0.9, 0.3, 0.2, 0.7, 0.5)
-
预测结果2(0.9, 0.3, 0.2, 0.7, 0.8))
-
分别对两个预测结果进行排序,并提取他们的序号
- 结果1 (5, 2, 1, 4, 3)
- 结果2 (5, 2, 1, 3, 4)
-
对正分类序号累加
- 结果1: ∑ 正 样 本 R A N K ( s c o r e ) = 5 + 4 = 9 \sum_{正样本}{RANK(score)}=5+4=9 ∑正样本RANK(score)=5+4=9
- 结果2: ∑ 正 样 本 R A N K ( s c o r e ) = 5 + 3 = 8 \sum_{正样本}{RANK(score)}=5+3=8 ∑正样本RANK(score)=5+3=8
-
计算两个结果的AUC:
- 结果1: A U C = 9 − 2 ∗ ( 2 + 1 ) 2 2 ∗ 3 = 1 AUC = \frac{9-\frac{{2}*({2}+1)}{2}}{2*3}=1 AUC=2∗39−22∗(2+1)=1
- 结果2: A U C = 8 − 2 ∗ ( 2 + 1 ) 2 2 ∗ 3 = 0.833 AUC = \frac{8-\frac{{2}*({2}+1)}{2}}{2*3}=0.833 AUC=2∗38−22∗(2+1)=0.833
-
-
ROC和AUC最详细解读
2020-05-08 14:46:38本着科普类文章最基本的原则,由浅入深的讲解ROC和AUC. 混淆矩阵 ROC曲线 AUC 优势 混淆矩阵 混淆矩阵是衡量二分类模型最简单、最直观的方法。 正例(positive) 反例(negative) (预测)正例 true ...本着科普类文章最基本的原则,由浅入深的讲解ROC和AUC.
- 混淆矩阵
- ROC曲线
- AUC
- 优势
混淆矩阵
混淆矩阵是衡量二分类模型最简单、最直观的方法。
正例(positive) 反例(negative) (预测)正例 true positive(TP) false positive(FP) (预测)反例 false negative(FN) true negative(TN) \quad \quad 上面这个表格就是混淆矩阵,行标题的正例和反例是样本真实的分类,列标题代表分类模型预测的结果。TP代表样本真是为正例,模型预测也为正例,叫做真阳;FP代表样本真实是反例,模型预测为正例,叫做假阳;FN代表样本真实是正例,模型预测为反例,叫做假阴;TN代表样本真实是反例,模型预测也为反例,叫做真阴。
\quad \quad 从混淆矩阵中,我们可以得到5个基本的评价分类模型指标:
a c c u r a c y ( 准 确 率 ) = T P + T N T P + T N + F P + F N accuracy(准确率)=\frac{TP+TN}{TP+TN+FP+FN} accuracy(准确率)=TP+TN+FP+FNTP+TN
表示所有分类正确的样本占总样本的比值(ACC)。p r e c i s i o n ( 精 确 率 ) = T P T P + F P precision(精确率)=\frac{TP}{TP+FP} precision(精确率)=TP+FPTP
表示在所有预测为正例的样本中,真实为正例的比值(PPV)。r e c a l l ( 召 回 率 ) = T P T P + F N recall(召回率)=\frac{TP}{TP+FN} recall(召回率)=TP+FNTP
表示在所有真实为正例的样本中,预测也为正例的比值(TPR)。s p e c i f i c i t y ( 特 异 率 ) = T N T N + F P specificity(特异率)=\frac{TN}{TN+FP} specificity(特异率)=TN+FPTN
表示在所有真实为反例的样本中,预测也为反例的比值(TNR)。F 1 m e a s u r e = 2 1 p r e c i s i o n + 1 r e c a l l F1\quad measure=\frac{2}{\frac{1}{precision}+\frac{1}{recall}} F1measure=precision1+recall12
综合了precision和recall的结果,取值在0到1之间,0表示模型效果最差,1表示模型效果最好。ROC曲线
ROC曲线的绘制
\quad \quad 先给出两个概念的定义:
T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP,代表实际的正样本中,正确预测的比例,记作真阳率。
F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP,代表实际的负样本中,错误预测的比例,记作假阳率。
\quad \quad TPR、FPR ∈ [ 0 , 1 ] \in[0,1] ∈[0,1],TPR越高越好,而FPR越低越好。对于任意的一个二分类模型,都可以得到TPR和FPR两个指标,我们以FPR为横坐标,TPR为纵坐标,在平面直角坐标系中标出该分类模型对应的点。
\quad \quad 有了一个点,如何得到一条曲线呢?总所周知,分类模型首先给出样本属于某类的概率,然后人为指定一个阈值,概率大于该阈值则样本属于某类,小于则属于另一类。下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率。
我们从高到底,依次把score作为分类模型的阈值,在每一个阈值下都可以计算出一对(FPR, TPR),共有20个点,把它们画在坐标系中,就可以得到一条曲线,即ROC曲线。实际中,我们会有很多个测试样本,按上面的方法会得到很多个点,最终得到一条近似光滑的曲线。当模型达到理想状态,即FPR为0,TPR为1,模型最好,因此越接近(0,1)点的分类模型效果越好。当FPR=TPR时,模型效果等于随机分类。
\quad \quad 对上面的描述做一个总结:ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线——ROC 曲线。平面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。对某个分类器而言,我们可以根据其在测试样本上的表现得到一个TPR和FPR点对。这样,此分类器就可以映射成ROC平面上的一个点。调整这个分类器分类时使用的阈值,我们就可以得到一个经过(0, 0),(1, 1)的曲线,这就是此分类器的ROC曲线。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。因为(0, 0)和(1, 1)连线形成的ROC曲线实际上代表的是一个随机分类器。如果很不幸,你得到一个位于此直线下方的分类器的话,一个直观的补救办法就是把所有的预测结果反向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。AUC
\quad \quad AUC即 area under curve,顾名思义,AUC是ROC曲线下的面积,也是二分类模型的一个评价指标。为什么要使用AUC呢?因为当比较不同分类模型的性能时,ROC给出的只是一个直观上的对比结果,即曲线越靠近左上角越好。当两个分类模型的ROC曲线相交时,很难直接说出那个模型的性能更好。因此,我们进一步引出了AUC这个指标,它是一个数值,可以清晰地比较模型优劣。AUC值小于1,一般介于0.5到1之间,AUC值越大越好。
优势
\quad \quad 为什么使用ROC曲线呢?原因有二(期待有人继续补充):
1.当测试集中的正负样本比例发生变化时,ROC曲线基本不变。它很好的规避了样本不均衡带来的影响和虚假accuracy。仍然借用网络上的一张图:
a和b分别表示两个模型在正负样本均衡下的ROC曲线和PR曲线(precision-recall曲线),c和d分别是负样本增大到原来的10倍的结果。明显看出,PR曲线变化很大,而ROC曲线的形状基本不变。
2.前面说到,分类模型中需要人为指定一个阈值,根据这个阈值来最终确定每个样本的类别,因此这个阈值的选择会直接影响模型的精度。ROC曲线描绘了不同阈值下的FPR和TPR,帮助我们选到最优的阈值,一定程度上避免了这个问题。 -
ROC和AUC的原理及AUC计算方法
2019-10-10 13:10:511.非均衡分类问题 在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的。...所以,在分类中,当某个类别的重要性高于其他类别时,可以使用Precison和Rec...1.非均衡分类问题
在大多数情况下不同类别的分类代价并不相等,即将样本分类为正例或反例的代价是不能相提并论的。例如在垃圾邮件过滤中,我们希望重要的邮件永远不要被误判为垃圾邮件,还有在癌症检测中,宁愿误判也不漏判。在这种情况下,仅仅使用分类错误率来度量是不充分的,这样的度量错误掩盖了样例如何被错分的事实。所以,在分类中,当某个类别的重要性高于其他类别时,可以使用Precison和Recall多个比分类错误率更好的新指标。
Precison(查准率):预测为正例的样本中真正正例的比例。
Recall(召回率):真正为正例的样本有多少被预测出来。
可见,我们可以根据我们最终的目标来选择度量指标。例如,在癌症检测中,我们希望选择Recall较高的模型(有病为正例)。而在垃圾邮件过滤中,我们希望选择Precison较高的模型。但是我们很容易构造一个高查准率或高召回率的分类器,但是很难保证两者同时成立。构建一个同时使两者很大的分类器是具有挑战性的。
ROC就是一个用于度量分类中的非均衡性的工具
2.ROC曲线ROC(Receiver Operating Characteristic)曲线和AUC(area under the curve)常被用来评价一个二值分类器(binary classifier)的优劣。
下面简单介绍ROC和AUC的特点,以及更为深入地讨论如何作出ROC曲线图以及计算AUC。
需要提前说明的是,我们这里只讨论二值分类器。对于分类器,或者说分类算法,评价指标主要有precision,recall,F-score,以及我们今天要讨论的ROC和AUC。
ROC可以用来比较不同分类器的相关性能,下图是一个ROC曲线的示例。
其中,ROC曲线的横坐标为false positive rate(FPR 假阳率),纵坐标为true positive rate(TPR 真阳率)。
FPR:所有负例中有多少被预测为正例; TPR:有多少真正的正例被预测出来;
ROC 描绘了两者的相对权衡:
benefits(true postives)
costs(false positives)下图中详细说明了FPR和TPR是如何定义的:
下图帮助理解概率分布:
F-measure: precison和recall的调和平均值。没有一个单个的度量可以告诉所有的信息,所以建议使用多个度量。
接下来我们考虑ROC曲线图中的四个点和一条线:
第一个点,(0,1),即FPR=0, TPR=1,这意味着FN(false negative)=0,并且FP(false positive)=0。这是一个完美的分类器,它将所有的样本都正确分类。
第二个点,(1,0),即FPR=1,TPR=0,所有正例都被预测为负例,即所有正例都没被预测出来,这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。
第三个点,(0,0),即FPR=TPR=0,即FP =TP =0,可以发现该分类器预测所有的样本都为负样本。
第四个点(1,1),分类器实际上预测所有的样本都为正样本。
经过以上的分析,我们可以断言,ROC曲线越接近左上角,该分类器的性能越好,意味着分类器在假阳率很低的同时获得了很高的真阳率。
虚线y=x:这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果。例如(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本。出现在右下角三角形中的任何分类器都比随机猜测更糟糕。因此,在ROC图中,此三角形通常为空。3.如何画ROC曲线
对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值,这又是如何得到的呢?
我们先来看Wikipedia上面对ROC曲线的定义:
“In signal detection theory, a receiver oprating 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”。如何理解这里的“discrimination threashold”呢?它代表的是分类器以多大的置信度将样本分类为正样本。分类器的一个重要功能”概率输出“,即表示分类器认为某个样本具有多大的概率属于正样本(或负样本)。通过更深入地了解各个分类器的内部机理,我们总能想办法得到一种概率输出。通常来说,是将一个实数范围通过某个变换映射到(0,1)区间。假如我们已经得到了所有样本的概率输出(属于正样本的概率),那么我们就可以通过改变”discrimination threshold“来绘制ROC曲线。
(许多分类器,例如决策树或者规则集合,被设计产生一个类别决策,即将每个样本预测为Y或N。当使用这样的离散分类器时,产生一个单个额confusion矩阵,对应于一个ROC点。而一些分类器,例如Naive Bayes,产生一个样本概率值,这样一个ranking/scoring分类器可以使用一个threshold来产生一个discrete(binary)分类器:如果分类器输出的概率大于threshold,分类器产生Y,否则产生N。每个不同的threshold值在ROC空间产生一个不同的点(对应于一个不同的confusion matrix)。)
现在的问题是如何改变“discrimination threashold”?
具体过程如下所述:
1.如图,我们根据每个测试样本属于正样本的概率值score从大到小排序。(下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本))
2.接着,我们从高到低,依次将score作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。
例如:对于图中第4个样本,其score值为0.6,那么score值大于等于0.6的样本1,2,3,4都被认为是正样本,而其他样本则被认为是负样本。
3.每次选取不同的score作为threshold,我们就可以得到一组FPR和TPR,即曲线上的一点。总共得到了20组FPR和TPR的值,将这些(FPR,TPR)对连接起来,就可以得到完整的ROC曲线如下图。(当threshold取值越多,ROC曲线就越平滑)
当我们将threshold设置为1和0时,即分别对应将所有样本划分为负样本和将所有样本划分为正样本,就可以得到曲线上的(0,0)和(1,1)两点。
关于score值:分类器都会提供每个样例被判为阳性或者阴性的可信程度值,大多数分类器都能够做到这一点,但是在通常情况下,这些值会在最后输出离散分类标签之前被清除。例如,朴素贝叶斯能够提供一个可能值,在Logistic回归中输入到sigmoid函数中的是一个数值。在Adaboost和SVM中,都会计算一个数值然后输入到sign()函数中,所有的这些值都可以看做score,用于衡量给定分类器的预测强度。
所以,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。我认为将评分值转化为概率更易于理解一些。
此图中,ROC点(0.1,0.5)产生了最高的准确率。注意到分类器的最好的准确率出现在threshold=0.54时,而不是我们认为的在类别平衡分布的threshold等于0.5处。
4.AUC值的计算
AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。
在了解了ROC曲线的构造过程后,编写代码实现并不是一件困难的事情。相比自己编写代码,有时候阅读其他人的代码收获更多,当然过程也更痛苦些。在此推荐scikit-learn中关于计算AUC的代码。
AUC意味着什么
那么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值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。
为什么使用ROC曲线
既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。而在这种情况下,ROC曲线能够保持不变。下图是ROC曲线和Precision-Recall曲线的对比:(说明,以上图片大都来自论文(Fawcett, 2006)截图)
在上图中,(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类器在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。
5.ROC曲线的python代码实现
import matplotlib.pyplot as plt import numpy as np pp =[['T',0.9],['T',0.8],['N',0.7],['T',0.6],['T',0.55], ['T',0.54],['N',0.53],['N',0.52],['T',0.51],['N',0.505], ['T',0.4],['N',0.39],['T',0.38],['N',0.37],['N',0.36], ['N',0.35],['T',0.34],['N',0.33],['T',0.30],['N',0.1]] aa =[0.9, 0.8, 0.7, 0.6, 0.55, 0.54, 0.53, 0.52, 0.51, 0.505, 0.4, 0.39, 0.38, 0.37, 0.36, 0.35, 0.34, 0.33, 0.3, 0.1] xx =[] yy =[] for a in aa: tp = 0 fn = 0 fp = 0 tn = 0 x = 0 y = 0 for p in pp: if (p[0] =='T') and (p[1]>=a): tp = tp+1 elif (p[0] =='T') and (p[1]<a): fn = fn+1 elif (p[0] =='N') and (p[1]>=a): fp = fp+1 elif (p[0] =='N') and (p[1]<a): tn = tn+1 x = float(fp)/(tn+fp) xx.append(x) y = float(tp)/(tp+fn) yy.append(y) plt.figure(figsize =(15,15) ) #为了让图像大一点 plt.title('homework of yanjia') plt.plot(xx,yy) # 画出这些点连成的线 plt.plot(xx, yy, 'ro') # 画出点,并标红 plt.ylabel('True positive rate') plt.xlabel('False positive rate') plt.axis([0, 1.0, 0, 1.0]) #设置x轴显示的范围是0到1.0,y轴的显示范围是0到1.0 plt.xticks([0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]) #没有上面这句代码的话,x轴可能只显示5个点,现在我们希望是10个点 plt.yticks(np.arange(0.0,1.1,0.1)) #另一种方式 #plt.grid(True) #开启方格 for x,y,a in zip(xx,yy,aa): #plt.text(x,y,(x,y),ha='center',va='bottom',fontsize=10) #在点上显示坐标(x,y) #plt.text(x,y,'a=%.2f' %a) #针对每一个(x,y),显示其对应的a=? plt.text(x,y,a) #只显示a plt.text(0,0,'Infinity') plt.show() i = 0 auc = 0 while(i<19): auc = auc + (xx[i+1]-xx[i])*(yy[i]+yy[i+1]) i = i+1 auc = float(auc/2) print ('auc=%.2f' % auc)
运行结果如下图,计算得到 auc值为0.68。
-
ROC和AUC曲线
2020-08-22 10:26:271、ROC曲线 根据TPR、FPR值,以FPR为横轴,TPR为...2、利用ROC曲线评价模型性能——AUC(Area Under Curve) 参考链接(可): https://blog.csdn.net/qq_30992103/article/details/99730059 参考链接(字手写的): ... -
什么是ROC和AUC?一文给你讲明白
2020-05-10 18:16:08ROC曲线与AUC值 本文根据以下文章整理而成,链接: (1)http://blog.csdn.net/ice110956/article/details/20288239 (2)http://blog.csdn.net/chjjunking/article/details/5933105 1.概述 AUC(Area ... -
评价标准:ROC和AUC
2022-04-16 16:17:41ROC的全名叫做Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线——ROC 曲线。 平面的横坐标是false positive rate(FPR),纵坐标是true positive rate(TPR)。对某个分类器. -
ROC和AUC介绍以及如何计算AUC
2017-08-02 17:01:29转载自:ROC和AUC以及如何计算AUC ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见[这里](http://bubblexc.com/y2011/148/)。这篇... -
ROC与AUC 的理解和python实现
2022-04-21 17:43:401. 混淆矩阵 2. 什么是ROC曲线 3. AUC是什么 4. 为什么使用ROC曲线 5. 用python的sklearn:绘制ROC曲线+求AUC (1). 分别求ROC和AUC (2). 直接求AUC -
roc曲线和auc_roc和auc曲线的初学者指南
2020-10-07 15:32:28roc曲线和auc博客结构(Blog Structure) As can be seen in the title above, the purpose of this blog is to gain a basic but strong fundamental knowledge of ROC and AUC and how they relate to a binary ... -
为什么使用ROC和AUC判断一个分类器的好坏呢?
2019-01-21 23:29:06首先我们先了解下什么是AUC和ROC,ROC的横轴表示为FPR(负正率),横轴表示NPR(真正率)。其中ROC曲线的斜率代表阈值,即阈值越来越小时,被分为正类的样例越来越多,但是还会掺杂着越来越多的负类样例。即TPR和FPR会... -
机器学习性能指标之ROC和AUC理解与曲线绘制
2020-12-24 18:34:32ROC曲线1、roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例;(1-... -
ROC和AUC,其实真的那么简单,需要的只是你的一点点耐心!
2019-03-09 13:44:21ROC和AUC曲线是用于计算任何分类模型性能的重要评估指标。 这些定义和术语在机器学习社区中非常常见,当我们开始学习分类模型时,我们每个人都会遇到这些定义和术语。 然而,大多数时候,他们并没有被完全理解或被... -
转载:理解 ROC 和 AUC
2020-11-27 16:33:02理解 ROC 和 AUC 20 November 2015 1. 引言 ROC(Receiver Operating Characteristic)曲线和AUC(Area Under Curve)常被用来评价一个二值分类器(binary classifier)的优劣。相比准确率、召回率、F-score这样... -
ROC和AUC介绍
2016-04-16 11:14:14最近看到关于ROC和AUC介绍及一篇好博客,转载一下,便于回顾。 ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,这篇博文简单介绍ROC和AUC的特点,以及... -
matlab下 ROC和AUC的实现
2017-04-26 22:10:27ROC matlab自带plotroc(gt,y); gt为真实输出,y为实际输出(归一化[0,1]) AUC function [result]=AUC(test_targets,output) %计算AUC值,test_targets为原始样本标签,output为分类器得到的标签 %均为行或... -
ROC/AUC曲线学习及Python实现
2021-10-06 17:05:46参考博客:【机器学习笔记】:一文让你彻底理解准确率,精准率,召回率,真正率,假正率,ROC/AUC 一、准确率,精准率,召回率 1.TP、TN、FP、FN概念 P(Positive):代表1 N(Negative):代表0 T(True):代表... -
机器学习模型评估指标ROC、AUC详解
2021-06-10 00:34:07我是小zROC/AUC作为机器学习的评估指标非常重要,也是面试中经常出现的问题(80%都会问到)。其实,理解它并不是非常难,但是好多朋友都遇到了一个相同的问题,那就是:每次看书的时候都很明... -
利用ROC和AUC度量分类器性能
2019-02-04 21:43:18关于ROC及AUC的介绍,可以参考:https://blog.csdn.net/qq_41080850/article/details/86560645 本文主要讨论用Python3实现ROC的绘制。另:以下代码均运行于Jupyter Notebook中。 代码实现: # 读入岩石-水雷数据... -
机器学习:ACC、ROC和AUC
2021-02-04 20:35:50机器学习:ACC、ROC和AUC 文章目录机器学习:ACC、ROC和AUC引言ROC简介如何画ROC曲线既然有了ACC为什么要有ROC呢(既生瑜何生亮呢) 引言 很多时候我们都用到ROC和AUC来评判一个二值分类器的优劣,其实AUC跟ROC... -
ROC和AUC的理解
2018-12-20 12:52:31ROC ROC经常被用来评价一个二值分类器的优劣。 举个例子,有10个样本。分类器会计算出经过激活函数前的score,假设score范围是(0,1)。根据score从左到右按降序排序。 1,如果 分类器效果...