sklearn如何计算precision_score指标?

时间:2016-06-06 14:25:28

标签: scikit-learn

你好我正在使用sklearn,为了更好地理解指标,我遵循了以下的precision_score示例:

from sklearn.metrics import precision_score
    y_true = [0, 1, 2, 0, 1, 2]

    y_pred = [0, 2, 1, 0, 0, 1]
    print(precision_score(y_true, y_pred, average='macro'))  

我得到的结果如下:

0.222222222222

我理解sklearn会按照以下步骤计算结果:

  • 对于标签0精度为tp /(tp + fp)= 2 /(2 + 1)= 0.66
  • 表示标签1精度为0 /(0 + 2)= 0
  • 表示标签2精度为0 /(0 + 1)= 0

最后sklearn计算所有三个标签的平均精度:precision = (0.66 + 0 + 0) / 3 = 0.22

如果我们采用这些参数,则给出了这个结果:

precision_score(y_true, y_pred, average='macro')

另一方面,如果我们采用这个参数,改变average ='micro':

precision_score(y_true, y_pred, average='micro') 
然后我们得到:

0.33

如果我们取平均='加权':

precision_score(y_true, y_pred, average='weighted')
然后我们获得:

0.22.

我不太清楚当平均参数设置为'加权'或'微'时,sklearn如何计算此指标,如果有人能给我一个明确的解释,我真的很感激。

1 个答案:

答案 0 :(得分:2)

'micro'

通过将标签指示符矩阵的每个元素视为标签来全局计算指标。

'macro'

计算每个标签的指标,找出未加权的均值。 不会考虑标签不平衡

'weighted'

计算每个标签的指标,并找到它们的平均值,按支持加权(每个标签的真实实例数)

'samples'

计算每个实例的指标,并找出它们的平均值。

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html

对于支持措施: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

基本上是班级会员。

<强> 3.3.2.12。接收机工作特性(ROC)

函数roc_curve计算接收器工作特性曲线或ROC曲线。引用维基百科:

“接收器操作特性(ROC),或简称为ROC曲线,是图解说明二元分类器系统的性能,因为其鉴别阈值是变化的。它是通过在各种阈值设置下绘制阳性中的真阳性分数(TPR =真阳性率)与阴性中的假阳性分数(FPR =假阳性率)来绘制的。 TPR也称为敏感性,FPR是一个减去特异性或真实负面率。“

TN /真阴性:病例呈阴性,预测为阴性。

TP / True Positive:病例呈阳性且预测为阳性。

FN / False否定:病例呈阳性,但预测为阴性。

FP / False Positive:病例呈阴性但预测为阳性#Basic术语

confusion = metrics.confusion_matrix(expected, predicted)
print confusion,"\n"
TN, FP    = confusion[0, 0], confusion[0, 1]
FN, TP    = confusion[1, 0], confusion[1, 1]

print 'Specificity:        ',  round(TN / float(TN + FP),3)*100, "\n"
print 'Sensitivity:        ',  round(TP / float(TP + FN),3)*100, "(Recall)"