![](/img/trans.png)
[英]Specificity at different thresholds (in the same way as sklearn.metrics.precision_recall_curve)
[英]sklearn.metrics.precision_recall_curve: Why are the precision and recall returned arrays instead of single values
我正在计算我最近准备的数据集上的现成算法的精度和召回率。
这是一个二元分类问题,我希望计算我构建的每个分类器的精度,召回率和f分数。
test_x, test_y, predics, pred_prob,score = CH.buildBinClassifier(data,allAttribs,0.3,50,'logistic')
构建分类器方法基本上构建分类器,拟合训练数据并返回test_x(测试数据的特征),test_y(地面实况标签),预测(由分类器做出的预测),red_prob(来自LogisiticRegression.predict_proba
预测概率) LogisiticRegression.predict_proba
方法)。
以下是计算精确召回的代码:
from sklearn.metrics import precision_recall_curve
pr, re, _ = precision_recall_curve(test_y,pred_prob,pos_label=1)
pr
(array([ 0.49852507, 0.49704142, 0.49554896, 0.49702381, 0.49850746,
0.5 , 0.5015015 , 0.50301205, 0.50453172, 0.50606061,
. . . . . . .
0.875 , 1. , 1. , 1. , 1. ,
1. , 1. , 1. , 1. ])
re
array([ 1. , 0.99408284, 0.98816568, 0.98816568, 0.98816568,
0.98816568, 0.98816568, 0.98816568, 0.98816568, 0.98816568,
. . . . . . .
0.04142012, 0.04142012, 0.03550296, 0.0295858 , 0.02366864,
0.01775148, 0.01183432, 0.00591716, 0. ]))
我不明白为什么精确和召回阵列? 它们不应该只是单个数字吗?
由于精度计算为tpf/(tpf+fpf)
并且同样可以回想起定义?
我知道通过下面的代码计算平均精度回忆,但不知何故看到数组而不是tpf,fpf,精度和召回让我想知道发生了什么。
from sklearn.metrics import precision_recall_fscore_support as prf
precision,recall,fscore,_ = prf(test_y,predics,pos_label=1,average='binary')
编辑:但没有average
和pos_label
参数,它会报告每个类的精度。 有人可以解释这两种方法的输出之间的差异吗?
在二进制分类问题中,pred_prob是实例在每个类中的概率,因此实际上预测值(类)取决于该概率,而另一个值则称为阈值。 pred_prob大于阈值的所有实例都分为一类,而另一类则更小。 默认阈值为0.5。
因此,改变阈值我们有不同的预测结果。 在许多问题中,通过调整阈值可以获得更好的结果。 这就是为您提供precision_recall_curve的原因。
来自precision_recall_curve的sklearn文档:
计算不同概率阈值的精确回忆对。
像逻辑回归这样的分类器模型实际上不输出类标签(如“0”或“1”),它们输出概率 (如0.67)。 这些概率告诉您输入样本属于特定类的可能性,如正(“1”)类。 但是您仍然需要选择概率阈值,以便算法可以将概率(0.67)转换为类(“1”)。
如果选择阈值0.5,则计算概率大于0.5的所有输入样本将分配给正类。 如果您选择不同的阈值,并且您获得了分配给正负类的不同数量的样本,因此不同的精度和召回分数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.