AUC(Area Under roc Curve )计算及其与ROC的关系

 

让咱们从头提及,首先AUC是一种用来度量分类模型好坏的一个标准。这样的标准其实有不少,例如:大约10年前在machine learning文献中一统天下的标准:分类精度;在信息检索(IR)领域中经常使用的recall和precision,等等。其实,度量反应了人们对” 好”的分类结果的追求,同一时期的不一样的度量反映了人们对什么是”好”这个最根本问题的不一样认识,而不一样时期流行的度量则反映了人们认识事物的深度的变 化。近年来,随着machine learning的相关技术从实验室走向实际应用,一些实际的问题对度量标准提出了新的需求。特别的,现实中样本在不一样类别上的不均衡分布(class distribution imbalance problem)。使得accuracy这样的传统的度量标准不能恰当的反应分类器的performance。举个例子:测试样本中有A类样本90个,B 类样本10个。分类器C1把全部的测试样本都分红了A类,分类器C2把A类的90个样本分对了70个,B类的10个样本分对了5个。则C1的分类精度为 90%,C2的分类精度为75%。可是,显然C2更有用些。另外,在一些分类问题中犯不一样的错误代价是不一样的(cost sensitive learning)。这样,默认0.5为分类阈值的传统作法也显得不恰当了。工具

为了解决上述问题,人们从医疗分析领域引入了一种新的分类模型performance评判方法——ROC分析。ROC分析自己就是一个很丰富的内容,有兴趣的读者能够自行Google。因为我本身对ROC分析的内容了解还不深入,因此这里只作些简单的概念性的介绍。测试

ROC的全名叫作Receiver Operating Characteristic,其主要分析工具是一个画在二维平面上的曲线——ROC curve。平面的横坐标是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曲线实际上表明的是一个随机分类器。若是很不幸,你获得一个位于此直线下方的分类器的话,一个直观的补救办法就是把全部的预测结果反向,即:分类器输出结果为正类,则最终分类的结果为负类,反之,则为正类。虽然,用ROC curve来表示分类器的performance很直观好用。但是,人们老是但愿能有一个数值来标志分类器的好坏。因而Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。一般,AUC的值介于0.5到1.0之间,较大的AUC表明了较好的performance。好了,到此为止,全部的 前续介绍部分结束,下面进入本篇帖子的主题:AUC的计算方法总结。spa

 

最直观的,根据AUC这个名称,咱们知道,计算出ROC曲线下面的面积,就是AUC的值。事实上,这也是在早期Machine Learning文献中常见的AUC计算方法。因为咱们的测试样本是有限的。咱们获得的AUC曲线必然是一个阶梯状的。所以,计算的AUC也就是这些阶梯下面的面积之和。这样,咱们先把score排序(假设score越大,此样本属于正类的几率越大),而后一边扫描就能够获得咱们想要的AUC。可是,这么 作有个缺点,就是当多个测试样本的score相等的时候,咱们调整一下阈值,获得的不是曲线一个阶梯往上或者往右的延展,而是斜着向上造成一个梯形。此时,咱们就须要计算这个梯形的面积。由此,咱们能够看到,用这种方法计算AUC其实是比较麻烦的。orm

 

一个关于AUC的颇有趣的性质是,它和Wilcoxon-Mann-Witney Test是等价的。这个等价关系的证实留在下篇帖子中给出。而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的几率大于负类样本的score。有了这个定义,咱们就获得了另一中计算AUC的办法:获得这个几率。咱们知道,在有限样本中咱们经常使用的获得几率的办法就是经过频率来估计之。这种估计随着样本规模的扩大而逐渐逼近真实值。这 和上面的方法中,样本数越多,计算的AUC越准确相似,也和计算积分的时候,小区间划分的越细,计算的越准确是一样的道理。具体来讲就是统计一下全部的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。而后除以MN。实现这个方法的复杂度为O(n^2)。n为样本数(即n=M+N)排序

 

第三种方法实际上和上述第二种方法是同样的,可是复杂度减少了。它也是首先对score从大到小排序,而后令最大score对应的sample 的rank为n,第二大score对应sample的rank为n-1,以此类推。而后把全部的正类样本的rank相加,再减去正类样本的score为最 小的那M个值的状况。获得的就是全部的样本中有多少对正类样本的score大于负类样本的score。而后再除以M×N。即ci

 

AUC=((全部的正例位置相加)-M*(M+1))/(M*N)it

 

另外,特别须要注意的是,再存在score相等的状况时,对相等score的样本,须要 赋予相同的rank(不管这个相等的score是出如今同类样本仍是不一样类的样本之间,都须要这样处理)。具体操做就是再把全部这些score相等的样本 的rank取平均。而后再使用上述公式。io