ROC和AUC介绍以及如何计算AUC!!

最初的帖子发布在我的博客上:

[En]

The original post was posted on my blog:

http://alexkong.net/2013/06/introduction-to-auc-and-roc/

ROC(Receiver Operating Characteristic)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣,对两者的简单介绍见[这里](
http://bubblexc.com/y2011/148/

)。这篇博文简单介绍ROC和AUC的特点,以及更为深入地,讨论如何作出ROC曲线图以及计算AUC。

ROC曲线

需要提前说明的是,我们这里只讨论二值分类器。对于分类器,或者说分类算法,评价指标主要有precision,recall,F-score^1,以及我们今天要讨论的ROC和AUC。下图是一个ROC曲线的示例^2

正如我们在这条ROC曲线的示例图中所看到的,ROC曲线的横坐标是假阳性率(FPR),纵坐标是真阳性率(TPR)。下图详细说明了如何定义FPR和TPR。

[En]

As we can see in the example diagram of this ROC curve, the Abscissa of the ROC curve is false positive rate (FPR) and the ordinate is true positive rate (TPR). The following figure details how FPR and TPR are defined.

接下来我们考虑ROC曲线图中的四个点和一条线。第一个点,(0,1),即FPR=0, TPR=1,这意味着FN(false negative)=0,并且FP(false positive)=0。Wow,这是一个完美的分类器,它将所有的样本都正确分类。第二个点,(1,0),即FPR=1,TPR=0,类似地分析可以发现这是一个最糟糕的分类器,因为它成功避开了所有的正确答案。第三个点,(0,0),即FPR=TPR=0,即FP(false positive)=TP(true positive)=0,可以发现该分类器预测所有的样本都为负样本(negative)。类似的,第四个点(1,1),分类器实际上预测所有的样本都为正样本。经过以上的分析,我们可以断言,ROC曲线越接近左上角,该分类器的性能越好。

下面考虑ROC曲线图中的虚线y=x上的点。这条对角线上的点其实表示的是一个采用随机猜测策略的分类器的结果,例如(0.5,0.5),表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本。

如何画ROC曲线

对于一个特定的分类器和测试数据集,显然只能得到一个分类结果,即一组FPR和TPR结果,而要得到一个曲线,我们实际上需要一系列FPR和TPR的值,这又是如何得到的呢?我们先来看一下[Wikipedia](
http://en.wikipedia.org/wiki/Receiver_operating_characteristic

)上对ROC曲线的定义:

In signal detection theory, a receiver operating 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)区间^3

假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变”discrimination threashold”?我们根据每个测试样本属于正样本的概率值从大到小排序。下图是一个示例,图中共有20个测试样本,”Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),”Score”表示每个测试样本属于正样本的概率^4

下一步,我们从高到低,以“Score”值作为阈值。当测试样本属于正样本的概率大于或等于该阈值时,我们认为它是正样本,否则就是负样本。例如,对于图中的第四个样本,其“Score”值为0.6,则样本1、2、3和4被视为正样本,因为它们的“Score”值大于或等于0.6,而其他样本被视为负样本。每次我们选择不同的阈值,就可以得到一组FPR和TPR,也就是ROC曲线上的点。这样,我们总共得到了20组FPR和TPR值,并将它们绘制在ROC曲线上,如下图所示:

[En]

Next, we take the “Score” value as the threshold threshold from high to low. When the probability that the test sample belongs to a positive sample is greater than or equal to this threshold, we think it is a positive sample, otherwise it is a negative sample. For example, for the fourth sample in the figure, its “Score” value is 0.6, then sample 1, 2, 3 and 4 are considered positive samples, because their “Score” values are greater than or equal to 0.6, while other samples are considered negative samples. Each time we choose a different threshold, we can get a set of FPR and TPR, that is, points on the ROC curve. In this way, we get a total of 20 sets of FPR and TPR values, and draw them on the ROC curve as shown in the following figure:

当我们将阈值设置为1和0时,我们可以在ROC曲线上分别得到两个点(0me0)和(1me1)。把这些(fpr,tpr)组合在一起,你就得到了ROC曲线。阈值越多,ROC曲线越平滑。

[En]

When we set threshold to 1 and 0, we can get two points on the ROC curve (0mem0) and (1mem1), respectively. Join these (FPR,TPR) pairs together and you get the ROC curve. The more threshold values, the smoother the ROC curve.

事实上,我们并不一定要得到每个测试样本都是正样本的概率值,只要我们得到了分类器对测试样本的“分数”(分数不一定在(0)的范围内)。分数越高,分类器就越确定测试样本是阳性样本,并同时使用每个分数作为阈值。我认为更容易理解如何将分数转化为概率。

[En]

In fact, we do not necessarily have to get the probability value that each test sample is a positive sample, as long as we get the “score” of the classifier to the test sample (the score is not necessarily in the range of (0)). The higher the score, the more certain the classifier thinks that the test sample is a positive sample and uses each score as threshold at the same time. I think it’s easier to understand how to translate a score into a probability.

AUC值的计算

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

在了解了ROC曲线的构造过程后,编写代码实现并不是一件困难的事情。相比自己编写代码,有时候阅读其他人的代码收获更多,当然过程也更痛苦些。在此推荐[scikit-learn](
http://scikit-learn.org/stable/

)中关于[计算AUC的代码](
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/metrics.py#L479

)。

为什么使用ROC曲线

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

在上图中,(A)和(C)是ROC曲线,(B)和(D)是精确召回曲线。(A)和(B)表示在原始测试集中对它们进行分类的结果(正负样本的均衡分布),以及(C)和(D)是将测试集中的负样本数增加到10倍后分类器的结果。显然,ROC曲线基本保持原貌,而Precision-Recall曲线变化较大。

[En]

In the figure above, (a) and (c) are ROC curves, and (b) and (d) are Precision-Recall curves. (a) and (b) show the results of classifying them in the original test set (balanced distribution of positive and negative samples), and (c) and (d) are the results of the classifier after increasing the number of negative samples in the test set to 10 times. It is obvious that the ROC curve basically keeps its original appearance, while the Precision-Recall curve changes greatly.

说明,文中除了第一张图来自Wikipedia外,其他的图都来自论文(Fawcett, 2006)[^6]截图.

http://en.wikipedia.org/wiki/File:Roccurves.png

[^5]: Davis, J., & Goadrich, M. (2006, June). The relationship between Precision-Recall and ROC curves. In Proceedings of the 23rd international conference on Machine learning (pp. 233-240). ACM.

[^6]: Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874.

参考资料和其他链接:

[En]

References and other links:

Original: https://www.cnblogs.com/zhizhan/p/6002209.html
Author: 止战F
Title: ROC和AUC介绍以及如何计算AUC!!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/6305/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部