我正在计算我最近准备的数据集上现成算法的精度和召回率。
这是一个二元分类问题,我希望为我构建的每个分类器计算精度、召回率和 f 分数。
test_x, test_y, predics, pred_prob,score = CH.buildBinClassifier(data,allAttribs,0.3,50,'logistic')
构建分类器方法基本上构建一个分类器,拟合一个训练数据并返回 test_x(测试数据的特征)、test_y(地面实况标签)、predict(分类器做出的预测)、red_prob(LogisiticRegression.predict_proba
方法的预测概率) .
下面是计算precision-recall的代码:
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
andpos_label
参数,它会报告每个类的精度。有人可以解释这两种方法的输出之间的区别吗?