【问题标题】:How does sklearn compute the precision_score metric?sklearn 如何计算precision_score 指标?
【发布时间】:2016-10-06 05:04:15
【问题描述】:

您好,我正在使用 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 如何计算此指标,如果有人能给我一个清晰的解释,我真的很感激。

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    '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 / True Negative:病例为阴性且预测为阴性。

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

    FN / False Negative:病例为阳性但预测为阴性。

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

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

    【讨论】:

    • 谢谢我已经读过了,但我想知道支持的权重(每个标签的真实实例数)?。
    • 谢谢,但是您知道文档中的 sklearn 是否定义了敏感性和特异性吗?
    • 非常感谢我真正需要的支持。
    • 我会建议每个计算的示例。喜欢这里:datascience.stackexchange.com/questions/15989/…
    • 让我补充一下:微平均精度,在多类单标签上下文中无非是精度
    猜你喜欢
    • 2019-04-30
    • 2020-06-09
    • 2019-02-14
    • 2014-04-13
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2016-03-08
    • 2019-09-14
    相关资源
    最近更新 更多