精度,召回率,F分数要求相等的输入

时间:2019-05-05 09:20:31

标签: python scikit-learn metrics evaluation

我正在使用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需要等量的输入?尤其是在评估召回率时(我本以为是猜测多于答案)。

我可以实现自己的指标,也可以简化数组以使其匹配。我想确定没有根本原因不应该这样做吗?

2 个答案:

答案 0 :(得分: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长度相同。

答案 1 :(得分:1)

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

您没有对测试集进行100%的预测是没有道理的。

比方说,您的数据集中有1M个数据点,但您只能预测200k,那是前200k点吗?最后?遍布?图书馆怎么知道哪个匹配哪个?

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