sklearn如何计算precision_score指标?

6

你好,我正在使用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.

当average参数设置为'weighted'或'micro'时,我不太理解sklearn如何计算此度量标准,如果有人能给我清晰的解释,我将不胜感激。

1个回答

5

'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则是1减去特异性或真负率。”

TN / 真反:情况为负且预测为负。

TP / 真正:情况为正且预测为正。

FN / 假反:情况为正但预测为负。

FP / 假正:情况为负但预测为正。

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)"

谢谢,我已经阅读了它,但我想知道什么是按支持加权(每个标签的真实实例数)? - neo33
谢谢,但您知道sklearn文档中是否定义了灵敏度和特异性吗? - neo33
非常感谢您的支持,这正是我所需要的。 - neo33
我建议提供每个计算的示例。就像这里:https://datascience.stackexchange.com/questions/15989/micro-average-vs-macro-average-performance-in-a-multiclass-classification-settin - Tommaso Guerrini
让我补充一下:在多类单标签的情况下,微平均精度就是准确率。 - Tommaso Guerrini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接