一文读懂精准率、召回率、pr曲线、roc曲线

       模型有各种各样的评测标准,比如 准确率、精确率、召回率、pr曲线、F1、roc曲线、roc_auc等,每种都有各自的优缺点,下面一一进行讨论。

       无论哪种评测标准,都是根据预测正负例的情况,和真实正负例的情况进行比较来进行的。

       首先来看下平时我们如何来表示预测正负例的,对于二分类的情况,我们的预测结果有两种情况,样本的真实标签也有两种情况,所以组合会有4中情况,也就是所谓的混淆矩阵:

一文读懂精准率、召回率、pr曲线、roc曲线_第1张图片

      其中 :

      P:(positive)  代表我们预测的是正例

      N:(negative)   代表我们预测的是负例

      T:(true) 代表我们预测的是正确的

      F:(false) 代表我们预测的是错误的

      TP:真正例

      FP:假正例

      TN:真负例

      FN:假负例

1、准确率(accuracy)

      描述:模型预测的结果中,预测正确的比率。

      公式:(TP+TN)/(TP+FP+TN+FN)

      举例:比如,模型一共对100个样本进行了预测,正确了90个,那么准确率就是  90%

      缺点:样本不平衡时不适用,比如,100个样本中,90个都是正例,如果模型单纯的都预测成正例,那么准确率也能达到90%,所以这个标准无法评测模型的好坏。

2、精确率(precision)

      描述:模型预测为正例的样本中,预测正确的比例。

      公式:TP/(TP+FP)

      举例:比如,模型对100个样本进行了预测,预测为正例的80个,预测为负例的20个,而预测为正例的样本中,确实有60个是正例,那么,精确率是60/80 =75%。

      适用场景:这个标准要求模型对预测结果的精确性,适用一些对结果要求高的地方,宁可漏掉也不能错判。

      缺点:从这个评测的方式,可以感受到,如果模型对判断为正例的要求约严格,那么精确率越高,比如,100个样本中有正负样例各50个,但是模型预测正例有10个,但是预测的这10个都是正确的,那么精确率为100%,但是不能说这个模型是好的。另外,这个对样本不平衡时也不适用。

3、召回率(recall)

      描述:样本预测为正例的个数,占样本真实正例个数比例。通俗来讲就是所有真实正例中,被预测成了正例比例。

      公式:TP/(TP+FN)

      举例:100个样本,50个正例,模型预测了40个正例,其中预测正确的是25个,那么召回率是  25/50=50%

      缺点:样本不平衡时,会有问题,就不举例说明了。模型对判断为正例要求不严格时,可以将大部分的正例都召回(问题就是很多不是正例的也会判断为正例),这样召回率会很高,但是不能说模型好。

        上面这个三个是比较容易理解的标准,但是都有自己的局限,无法根据其来完全的评判一个模型的好坏,需要更加全面的评判标准。从上面也可以看出,每一种评判标准只能评价模型的某一部分的好坏,比较片面,所以,想要全面的比价模型的好坏,需要根据几种标准平衡来考虑。

4、PR曲线,

        描述:以召回率(recall)为横轴,精确率(precision)为纵轴,调整模型阈值,获得的一个曲线。

一文读懂精准率、召回率、pr曲线、roc曲线_第2张图片

上面就是一个pr曲线图的例子,其实说的更明了一些,一个模型对所有的样本打完分数后,会得到下面的一个分布图,

一文读懂精准率、召回率、pr曲线、roc曲线_第3张图片

        可以看出,在中间位置,正例和负例掺杂在一起,模型越好,正负例的界限应该更清晰,模型越差,正负例掺杂的越多。我们结合上面的两个图,来看下pr图是如何画的,pr图是跟随模型阈值调整画出的,比如一开始阈值设置为大于1,这时,模型会把所有的样本预测为负例,这时,precision和recall都为零,逐渐减少阈值,当阈值小于模型给出所有样本中最大评分的那个样本时,会出现一个样本被预测为正例,如果此时这个样本也是真实的正例,这时precision为1,recall为1/(真实正例的个数),随着阈值的逐渐增加,越来越多的样本被预测为正例,但是被预测为正例的样本中,有的会是真正例,有的会是假正例(真实的正例和真实的负例有掺杂的),由于TP逐渐增加,recall的值会越来越大,由于TP也逐渐增加,precision的值会越来越小,等阈值设置为小于零时,所有的样本都被预测为正例了,recall会变成1,而precision的值,为真实正例在所有样本中的占比。在变化过程中,真实的正例越早的被分成正例,真实的负例,越晚的被分成正例,模型的性能越好,PR曲线下的面积也越大。        

        但是对于样本极度不均衡的情况下,这个曲线下的面积的意义就不是很大了,比如样本一共100个,95个正例,5个负例,在最后precision的值都会是0.95,在recall逐渐增加的过程中,precision的值基本(负样本优先被预测为负例时,会出现在0.95之下,但是在横轴上只会有很短的距离)在0.95之上,不同的模型,pr的曲线变化不大,曲线下的面积也很大,但是模型是否优秀,不好评价。

5、F1

        在选择阈值时,precision和recall是一对很难同时很大的指标,从上面的pr曲线也能看出,那在模型中应该选什么样的阈值来做模型的阈值呢,需要根据实际情况,看需要高的precision还是需要高的recall,如果两者都兼顾的话,这里给出了F1指标,F1 = 2*precision*recall/(precision+recall),这个值越大越好。

6、roc,roc_auc

        从上面的指标可以看出,当样本极度不均衡时,很难评价模型的好坏,首先看下什么是好的模型,上面我们说过,好的模型,就是能够把真实的正例和真实的负例,区分的很明显,越明显越好,在阈值从大到小的变化过程中,所有的真实的正例先被分到正例,然后再是所有的负例被分到正例,这样的模型最好,但是上面的单独的指标都在样本极度不均衡时,无法区分好模型和差模型,pr曲线的纵轴,代表的含义是:在预测为正例的样本中,真实为正例的比例,这个在样本极度不均衡的情况下,对模型的不同的感知也是不灵敏,原因上面已经分析了,说的再明了一些,就是真实的负例,在比较靠前的时间(阈值逐渐变小)被预测到了正例,和在比较靠后的时间被预测到了负例,对pr曲线的影响不大。其实如果有一种指标来统计分析,模型给真实的正例和真实的负例的预测分值的分布情况,两者的分值区分的越明显,模型越好,这种指标我还没有看到。

        上面的分析,如果有一种指标,在阈值从大到小的变化中,真实的正例和真实的负例,被分配到正例中时,都会产生比较明显的变化,并且这种变化,和样本是否均衡无关,这样的指标应该就可以用来应对样本不均衡的情况了,从这个思路出发,我们想一下,如果指标,仅仅和一类样本相关,比如仅仅和真实的正例相关,或者仅仅和真实的负例相关。我们的recall,的分母就是所有真实的正例,分母的数量是不会变化的,分子是真实的正例被预测为正例的个数,这个指标就很好,但是上面也分析了,仅仅使用这个指标是无法应对样本不均衡的情况的,我们从这个思路出发,recall是所有真实的正例被预测为正例的比例,那么相反的,应该还有一个指标为:所有真实的负例被预测为负例的比例吧,下面介绍几个指标,有点绕,多记几遍

        灵敏度,特异度,真正率,假正率。看着这里是4个指标,但是别怕,其实是两对,并且灵敏度就是我们的recall(概念有点多,叫法有点多),也就是,这里仅仅引入了一个前面没有的概念,下面看看关系

灵敏度(Sensitivity) = TP/(TP+FN)

特异度(Specificity)= TN/(FP+TN)

        可以看出特异度就是上面我们说的那个,所有真实的负例被预测为负例的比例,但是我们比较关心正例,所以,下面的讨论中使用(1-特异度)

真正率(TPR) =    灵敏度  =  recall  =TP/(TP+FN)

假正率(FPR)= 1-特异度 = FP/(FP + TN)

        真正率的含义上面已经说了很多次了,假正率的含义,是所有真实的负例中被预测为正例的比例,可以看出真正率和假正率的分母都是不变的,随着阈值的逐渐变小,样本逐渐的被预测为正例,真正率和假正率都会逐渐增加,但是,重点在分母上,比如样本分布的不均衡,真实的正例为95,真实的负例为5,那么,真正率的分母为95,假正率的分母为5,也就是如果有一个真实的负例被分到了正例,假正率就会达到20%,这个对模型分错的响应是比较大的,也可以说是感知比较灵敏,如果用这两个指标来做一个曲线,或者可以在样本极度不均衡的情况下,能对模型的好坏做出评价,这就是我们要说的roc曲线

        ROC(Receiver Operation Characteristic)曲线,又称为接受者特征曲线。

一文读懂精准率、召回率、pr曲线、roc曲线_第4张图片

        和分析pr曲线时相同,先将阈值设置的很大,此时所有的样本都被预测为负例,TPR和FPR都为零,逐渐减少阈值,一些样本逐渐本预测为正例,TPR和FPR逐渐增加,也就形成了上面的曲线,越好的模型,TPR越先增加,FPR越后增加,这样曲线也就越陡立,就如下图中的绿线,代表着,所有的真实的正例都被预测为正例后,真实的负例才逐渐的别预测成了正例,但是这个是理想模型。

一文读懂精准率、召回率、pr曲线、roc曲线_第5张图片

        从视觉上很好区分,上面的几个曲线哪个好,哪个不好,那用什么指标来评价?

        AUC(Area under Curve)曲线下面积,面积越大越好。

ROC曲线为何无视样本不均衡,其实我们刚才已经解释了,样本不均衡时,样本少的一方,每变化(从被预测为负例,变成被预测成正例)一个,对比例的影响也比较大,使用同类样本的比例来,即使样本不均衡,数量差距大,比例的变化一样。这样roc曲线仅仅和模型给样本打分的分布有关系,和样本类别比例无关,下面的动图是引用的https://zhuanlan.zhihu.com/p/46714763,中的,很好的解释了这一点。注:https://zhuanlan.zhihu.com/p/46714763  这篇文章非常详细的解释了各个指标。

一文读懂精准率、召回率、pr曲线、roc曲线_第6张图片

你可能感兴趣的:(算法,机器学习,机器学习,算法,深度学习)