Scikit-learn f1_score 用于字符串列表
Scikit-learn f1_score for list of strings
有没有什么方法可以将标签列表的 f1_score 计算为字符串,而不考虑它们的顺序?
f1_score(['a','b','c'],['a','c','b'],average='macro')
我希望这个 return 1 而不是 0.33333333333
我知道我可以对标签进行矢量化处理,但就我而言,这种语法会简单得多,因为我要处理很多标签
您需要的是用于多标签 class 化任务的 f1_score,为此您需要形状为 y_true
和 y_pred
的二维矩阵 [n_samples, n_labels]
.
您目前仅提供一维数组。因此,它将被视为多 class 问题,而不是多标签问题。
official documentation 提供了必要的详细信息。
为了正确评分,您 需要 将 y_true
、y_pred
转换为标签指示器矩阵 documented here:
y_true : 1d array-like, or label indicator array / sparse matrix
y_pred : 1d array-like, or label indicator array / sparse matrix
所以你需要像这样更改代码:
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 的示例:
有没有什么方法可以将标签列表的 f1_score 计算为字符串,而不考虑它们的顺序?
f1_score(['a','b','c'],['a','c','b'],average='macro')
我希望这个 return 1 而不是 0.33333333333
我知道我可以对标签进行矢量化处理,但就我而言,这种语法会简单得多,因为我要处理很多标签
您需要的是用于多标签 class 化任务的 f1_score,为此您需要形状为 y_true
和 y_pred
的二维矩阵 [n_samples, n_labels]
.
您目前仅提供一维数组。因此,它将被视为多 class 问题,而不是多标签问题。
official documentation 提供了必要的详细信息。
为了正确评分,您 需要 将 y_true
、y_pred
转换为标签指示器矩阵 documented here:
y_true : 1d array-like, or label indicator array / sparse matrix
y_pred : 1d array-like, or label indicator array / sparse matrix
所以你需要像这样更改代码:
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 的示例: