Python Scikit学习字符串列表的f1_分数

Python Scikit学习字符串列表的f1_分数,python,machine-learning,scikit-learn,jupyter,Python,Machine Learning,Scikit Learn,Jupyter,是否有任何方法可以将标签列表作为字符串计算f1_分数,而不考虑其顺序 f1_score(['a','b','c'],['a','c','b'],average='macro') 我希望它返回1而不是0.33333 我知道我可以矢量化标签,但在我的例子中,这种语法会容易得多,因为我处理许多标签你需要的是多标签分类任务的f1\u分数,为此你需要一个二维矩阵,用于y\u true和y\u pred形状[n\u样本,n\u标签] 您当前仅提供1-d阵列。因此,它将被视为一个多类问题,而不是多标签问题

是否有任何方法可以将标签列表作为字符串计算f1_分数,而不考虑其顺序

f1_score(['a','b','c'],['a','c','b'],average='macro')
我希望它返回1而不是0.33333


我知道我可以矢量化标签,但在我的例子中,这种语法会容易得多,因为我处理许多标签

你需要的是多标签分类任务的f1\u分数,为此你需要一个二维矩阵,用于
y\u true
y\u pred
形状
[n\u样本,n\u标签]

您当前仅提供1-d阵列。因此,它将被视为一个多类问题,而不是多标签问题

提供了必要的详细信息

要正确评分,您需要将
y_-true
y_-pred
转换为指标矩阵:

y_true:1d类数组,或标签指示符数组/稀疏矩阵

y_pred:1d类数组,或标签指示符数组/稀疏矩阵

因此,您需要如下更改代码:

from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.metrics import f1_score

y_true = [['a','b','c']]
y_pred = [['a','c','b']]

binarizer = MultiLabelBinarizer()

# This should be your original approach
#binarizer.fit(your actual true output consisting of all labels)

# In this case, I am considering only the given labels.
binarizer.fit(y_true)

f1_score(binarizer.transform(y_true), 
         binarizer.transform(y_pred), 
         average='macro')

Output:  1.0
您可以在此处查看MultilabelBinarizer的示例: