我正在使用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
需要等量的输入?尤其是在评估召回率时(我本以为是猜测多于答案)。
我可以实现自己的指标,也可以简化数组以使其匹配。我想确定没有根本原因不应该这样做吗?
答案 0 :(得分:1)
这实际上取决于您的y_true
和y_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_true
和y_pred
长度相同。
答案 1 :(得分:1)
这很简单,因为sklearn在这里扮演着安全的角色。
您没有对测试集进行100%的预测是没有道理的。
比方说,您的数据集中有1M个数据点,但您只能预测200k,那是前200k点吗?最后?遍布?图书馆怎么知道哪个匹配哪个?
在指标计算的输入处必须具有1:1的对应关系。如果您对某些点没有预测,请将其排除(但要确保首先知道为什么没有这种预测,如果管道没有问题)-您不想说您具有1%的精度的100%召回率,最终您只预测了10%的数据集。