Python Scikit学习字符串列表的f1_分数
是否有任何方法可以将标签列表作为字符串计算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_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的示例: