precision , recall , f score 当 y_pred & y_true 有不同的尺寸
precision , recall , f score when y_pred & y_true have different sizes
我有两个列表:
"A" 是list of lists,每个item包含list of predicted tags
"B"是列表的列表,每一项都包含真实的标签
我正在尝试在迭代中使用 scikit-learn 计算精度、召回率、f 分数,A[i] 与 B[i] 相比,但它说
ValueError:发现样本数量不一致的输入变量:[3, 2]
找了一些类似的话题,但是没有答案Computing precision and recall for two sets of keywords in NLTK and Scikit for sets of different sizes
当我们计算这些指标时,我们会将实际值与预测值进行比较。因此,如果您的测试集有 10 个数据点,那么您的模型应该有 10 个预测。
TL;DR
A[i] 需要和 B[i].
在维度上保持一致
如果您包含数据的示例,可以将我的答案编辑得更准确!
y_true
和 y_pred
size() 必须保持相同的精度和召回率。 y_true[i]
和 y_pred[i]
的大小可能不同。查看 precision_score()
and recall_score()
的文档。请注意,您需要将有效值传递给这些方法中的 average
参数。
另请查看 this page 以了解有关多标签分类评分技术的更多信息。
编辑:添加了一些代码,从评论中获取您的示例数据。
首先,您需要 one-hot 对数据中所有可用标签的 y_true
和 y_pred
进行编码。
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.metrics import recall_score, precision_score
A=[['a','b','c'],['d','e','f','g']]
B=[['a','b'],['d','f','g']]
multibinarizer = MultiLabelBinarizer()
A_new = multi.fit(A).transform(A)
B_new = multi.transform(B)
#average = 'valid strategy for multilabel
precision_score(A_new,B_new,average='samples')
#output -> 1.0
recall_score(A_new, B_new, average='samples')
#output -> 0.70833333333333326
我有两个列表: "A" 是list of lists,每个item包含list of predicted tags "B"是列表的列表,每一项都包含真实的标签
我正在尝试在迭代中使用 scikit-learn 计算精度、召回率、f 分数,A[i] 与 B[i] 相比,但它说
ValueError:发现样本数量不一致的输入变量:[3, 2]
找了一些类似的话题,但是没有答案Computing precision and recall for two sets of keywords in NLTK and Scikit for sets of different sizes
当我们计算这些指标时,我们会将实际值与预测值进行比较。因此,如果您的测试集有 10 个数据点,那么您的模型应该有 10 个预测。
TL;DR A[i] 需要和 B[i].
在维度上保持一致如果您包含数据的示例,可以将我的答案编辑得更准确!
y_true
和 y_pred
size() 必须保持相同的精度和召回率。 y_true[i]
和 y_pred[i]
的大小可能不同。查看 precision_score()
and recall_score()
的文档。请注意,您需要将有效值传递给这些方法中的 average
参数。
另请查看 this page 以了解有关多标签分类评分技术的更多信息。
编辑:添加了一些代码,从评论中获取您的示例数据。
首先,您需要 one-hot 对数据中所有可用标签的 y_true
和 y_pred
进行编码。
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.metrics import recall_score, precision_score
A=[['a','b','c'],['d','e','f','g']]
B=[['a','b'],['d','f','g']]
multibinarizer = MultiLabelBinarizer()
A_new = multi.fit(A).transform(A)
B_new = multi.transform(B)
#average = 'valid strategy for multilabel
precision_score(A_new,B_new,average='samples')
#output -> 1.0
recall_score(A_new, B_new, average='samples')
#output -> 0.70833333333333326