scikit-learn 在多标签分类中计算 F1

Posted

技术标签:

【中文标题】scikit-learn 在多标签分类中计算 F1【英文标题】:scikit-learn calculate F1 in multilabel classification 【发布时间】:2016-01-24 10:16:38 【问题描述】:

我正在尝试在multi-label classification 中使用 scikit 计算宏 F1

from sklearn.metrics import f1_score

y_true = [[1,2,3]]
y_pred = [[1,2,3]]

print f1_score(y_true, y_pred, average='macro')

但是它失败并显示错误消息

ValueError: multiclass-multioutput is not supported

如何计算具有多标签分类的宏 F1?

【问题讨论】:

【参考方案1】:

在当前的 scikit-learn 版本中,您的代码会导致以下警告:

DeprecationWarning: Direct support for sequence of sequences multilabel
    representation will be unavailable from version 0.17. Use
    sklearn.preprocessing.MultiLabelBinarizer to convert to a label
    indicator representation.

按照此建议,您可以使用sklearn.preprocessing.MultiLabelBinarizer 将此多标签类转换为f1_score 接受的形式。例如:

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

y_true = [[1,2,3]]
y_pred = [[1,2,3]]

m = MultiLabelBinarizer().fit(y_true)

f1_score(m.transform(y_true),
         m.transform(y_pred),
         average='macro')
# 1.0

【讨论】:

想知道如何解决多元回归问题。

以上是关于scikit-learn 在多标签分类中计算 F1的主要内容,如果未能解决你的问题,请参考以下文章

BERT模型在多类别文本分类时的precision, recall, f1值的计算

scikit-learn机器学习逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1

如何在 scikit-learn 的分类问题中为 F1 分数做 GridSearchCV?

如何计算多标签分类的 F1 分数?

如何在多标签设置中最大化召回率?

如何告诉 scikit-learn 为哪个标签给出了 F-1/precision/recall 分数(在二进制分类中)?