当前位置: 移动技术网 > IT编程>脚本编程>Python > P-R曲线深入理解

P-R曲线深入理解

2019年07月15日  | 移动技术网IT编程  | 我要评论

半亩方塘书苑,arguments.callee,沪剧网

p-r曲线就是精确率precision vs 召回率recall 曲线,以recall作为横坐标轴,precision作为纵坐标轴。首先解释一下精确率和召回率。

解释精确率和召回率之前,先来看下混淆矩阵,

  负      正
 负 tn  fp 
 正  fn  tp

 


把正例正确分类为正例,表示为tp(true positive),把正例错误分类为负例,表示为fn(false negative),

把负例正确分类为负例,表示为tn(true negative), 把负例错误分类为正例,表示为fp(false positive)

 

精确率和召回率可以从混淆矩阵中计算而来,precision = tp/(tp + fp), recall = tp/(tp +fn)

那么p-r曲线是怎么来的呢?

 

算法对样本进行分类时,都会有置信度,即表示该样本是正样本的概率,比如99%的概率认为样本a是正例,1%的概率认为样本b是正例。通过选择合适的阈值,比如50%,对样本进行划分,概率大于50%的就认为是正例,小于50%的就是负例。

 

通过置信度就可以对所有样本进行排序,再逐个样本的选择阈值,在该样本之前的都属于正例,该样本之后的都属于负例。每一个样本作为划分阈值时,都可以计算对应的precision和recall,那么就可以以此绘制曲线。那很多书上、博客上给出的p-r曲线,都长这样

 

当然,这种曲线是有可能的。但是仔细琢磨就会发现一些规律和一些问题。

 

根据逐个样本作为阈值划分点的方法,可以推敲出,recall值是递增的(但并非严格递增),随着划分点左移,正例被判别为正例的越来越多,不会减少。而精确率precision并非递减,二是有可能振荡的,虽然正例被判为正例的变多,但负例被判为正例的也变多了,因此precision会振荡,但整体趋势是下降。

 

另外p-r曲线肯定会经过(0,0)点,比如讲所有的样本全部判为负例,则tp=0,那么p=r=0,因此会经过(0,0)点,但随着阈值点左移,precision初始很接近1,recall很接近0,因此有可能从(0,0)上升的线和坐标重合,不易区分。如果最前面几个点都是负例,那么曲线会从(0,0)点开始逐渐上升。

 

曲线最终不会到(1,0)点。很多p-r曲线的终点看着都是(1,0)点,这可能是因为负例远远多于正例。

最后一个点表示所有的样本都被判为正例,因此fn=0,所以recall = tp/(tp + fn) = 1, 而fp = 所有的负例样本数,因此precision = tp/(tp+fp) = 正例的占所有样本的比例,故除非负例数很多,否则precision不会为0.

 

因此,较合理的p-r曲线应该是(曲线一开始被从(0,0)拉升到(0,1),并且前面的都预测对了,全是正例,因此precision一直是1,)

 

另外,如果有个划分点可以把正负样本完全区分开,那么p-r曲线就是整个1*1的面积。

 

总之,p-r曲线应该是从(0,0)开始画的一条曲线,切割1*1的正方形,得到一块区域。
---------------------
作者:keep_forward
来源:csdn
原文:https://blog.csdn.net/b876144622/article/details/80009867
版权声明:本文为博主原创文章,转载请附上博文链接!

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网