PR曲线和F1、ROC曲线和AUC

时间:2022-12-08 18:47:30

最近阅读机器学习,在评估学习器的性能时,书中提到了P、R、F1值度量和ROC曲线和AUC值度量。

P、R、F1

预测结果
正例 反例
真实情况 正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)

P(查准率): P=TPTP+FP   即预测结果中真正的正例的比例。
R(查全率): R=TPTP+FN    即所有正例中被正确预测出来的比例。
如图:
PR曲线和F1、ROC曲线和AUC
P-R 曲线:
在机器学习中分类器往往输出的不是类别标号,而是属于某个类别的概率值,根据分类器的预测结果从大到小对样例进行排序,逐个把样例加入正例进行预测,算出此时的P、R值。
PR曲线和F1、ROC曲线和AUC
如上图:
真实情况正例反例各有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曲线(示意图,不对应上面数据):
PR曲线和F1、ROC曲线和AUC
P-R 曲线越靠近右上角性能越好。

F1=2×P×RP+R    F1值综合考虑了P值和R值。
P、R和F1评价在信息检索中用的比较多,在机器学习中还有一种ROC曲线来评价性能。

ROC曲线和AUC

和P-R曲线类似,ROC曲线用FPR(假正例率)作横轴,用TPR(真正例率)作纵轴,其中:
FPR=FPTN+FP
TPR=TPTP+FN
同样用上面的数据,
用0.9作为阈值,此时TP=1,FP=0,FN=9,TN=10,故TPR=0.1,FPR=0。
用0.8作为阈值,此时TP=2,FP=0,FN=8,TN=10,故TPR=0.2,FPR=0。
用0.7作为阈值,此时TP=2,FP=1,FN=8,TN=9,故TPR=0.2,FPR=0.1。
用0.6作为阈值,此时TP=3,FP=1,FN=7,TN=9,故TPR=0.3,FPR=0.1。
以此类推。。。
最后的ROC曲线如下图:
PR曲线和F1、ROC曲线和AUC
AUC的值就是ROC曲线下方围成区域的面积大小。

PR曲线和ROC曲线的关系

PR曲线和ROC曲线都能评价分类器的性能。如果分类器a的PR曲线或ROC曲线包围了分类器b对应的曲线,那么分类器a的性能好于分类器b的性能。
PR曲线和ROC曲线有什么联系和不同:
相同点:
首先从定义上PR曲线的R值是等于ROC曲线中的TPR值。
都是用来评价分类器的性能的。
不同点:
ROC曲线是单调的而PR曲线不是(根据它能更方便调参),可以用AUC的值得大小来评价分类器的好坏(是否可以用PR曲线围成面积大小来评价呢?)。
正负样本的分布失衡的时候,ROC曲线保持不变,而PR曲线会产生很大的变化。
PR曲线和F1、ROC曲线和AUC
(a)(b)分别是正反例相等的时候的ROC曲线和PR曲线
(c)(d)分别是十倍反例一倍正例的ROC曲线和PR曲线
可以看出,在正负失衡的情况下,从ROC曲线看分类器的表现仍然较好(图c),然而从PR曲线来看,分类器就表现的很差。
事实情况是分类器确实表现的不好(分析过程见知乎 qian lv 的回答),是ROC曲线欺骗了我们。

参考资料:
http://alexkong.net/2013/06/introduction-to-auc-and-roc/
https://www.zhihu.com/question/30643044
https://en.wikipedia.org/wiki/Precision_and_recall
Jesse Davis,Mark Goadrich:The Relationship Between Precision-Recall and ROC Curves