[英]Precision, Recall, F-score requiring equal inputs
我正在使用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
需要相等数量的输入? 尤其是在评估召回率时(我本以为是猜测多于答案)。
我可以实现自己的指标,也可以减少数组以使其匹配。 我想确定没有根本原因不应该这样做吗?
这实际上取决于您的y_true
和y_pred
在您的情况下的含义。 但通常, y_true
将是一个向量,指示y_pred
每个元素的真实值是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
的长度设置为相同。
这很简单,因为sklearn在这里扮演着安全的角色。
您没有对测试集进行100%的预测是没有道理的。
假设您的数据集中有1M个数据点,但您只能预测200k,那是前200k点吗? 最后? 遍布? 图书馆如何知道哪个匹配哪个?
在指标计算的输入处必须具有1:1的对应关系。 如果您对某些点没有预测,请将其排除(但要确保首先知道为什么没有这种预测,如果管道没有问题)-您不想说您具有1%的精度的100%召回率,最终您仅预测了10%的数据集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.