【问题标题】:Precision, Recall, F-score requiring equal inputsPrecision、Recall、F-score 需要相等的输入
【发布时间】:2019-05-05 09:20:30
【问题描述】:

我正在使用scikit-learn 来查看精度、召回率和 f 分数:

from sklearn.metrics import `precision_score`

然后:

y_true = np.array(["one", "two", "three"])
y_pred = np.array(["one", "two"])

precision = precision_score(y_true, y_pred, average=None)
print(precision)

返回的错误是:

ValueError: 发现样本数量不一致的输入变量:[3, 2]

由于输入数组不平衡,为什么scikit-learn 需要相同数量的输入?特别是在评估回忆时(我原以为猜测比答案多)。

我可以实现自己的指标,或者只是减少数组以使其匹配。我想确定我不应该这样做的根本原因是什么?

【问题讨论】:

    标签: python scikit-learn metrics evaluation


    【解决方案1】:

    这真的取决于你的y_truey_pred 在你的情况下是什么意思。但一般来说,y_true 将是一个向量,指示 y_pred 的每个 元素的真实值应该是什么。我认为这不是您的情况,要使用 scikit-learn 的指标,您需要将它们置于该格式中。

    所以在二分类的情况下,精度为:

    correct_classifications = (y_true == y_pred).astype(int)
    precision = sum(y_pred * correct_classifications) / sum(y_pred)
    

    在这里你看到你需要y_truey_pred 的长度相同。

    【讨论】:

      【解决方案2】:

      这很简单,因为 sklearn 在这里扮演着安全的角色。

      您没有对测试集进行 100% 的预测是没有意义的。

      假设您的数据集中有 1M 数据点,但您只预测 200k,那是前 200k 点吗?最后?遍布?图书馆如何知道哪个匹配哪个?

      您必须在指标计算的输入处具有 1:1 的对应关系。如果您对某些点没有预测,则将其排除(但请确保您首先知道为什么没有此类预测,如果管道没有问题)-您不想说您以 1% 的精度实现 100% 的召回率,最终您只预测了 10% 的数据集。

      【讨论】:

      • 我遵循你的推理。我想这归结为场景,我总是通过 IR 的镜头来描绘这些指标。对返回的文档集的召回情况,根据与用户相关或不相关的情况进行评估。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2020-03-12
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-04-11
      • 2023-02-08
      相关资源
      最近更新 更多