如何使用sklearn.metrics计算多标签分类任务的微观/宏观度量



我有一个多标签分类器产生的结果,我想在python中使用sklearn.metrics计算微观和宏观精度、回忆和F1分数,但不太清楚如何计算。

我有两个二进制稀疏矩阵,dataOUTdataGT,它们分别表示同一数据集的分类结果和基本事实。两个矩阵的大小都是CCD_ 4。每个样本可以用一个或多个标签标记,因此如果分类器用第i个标签标记第j个样本,则dataOUT[i,j]1,否则为0

对于任何给定的类i,我可以通过从dataOUTdataGT中提取i行来轻松地计算规则精度、召回率和F分数,并将其提供给sklearn.metrics.precision_recall_fscore_support,例如:

import numpy as np
from sklearn.metrics import precision_recall_fscore_support
iLabel = 5 # some specific label
yOUT = np.asarray(dataOUT[iLabel,:].todense()).reshape(-1)
yGT = np.asarray(dataGT[iLabel,:].todense()).reshape(-1)
ps,rs,fs,ss = precision_recall_fscore_support(yGT,yOUT)
p = ps[1]   # Precision for iLabel
r = rs[1]   # Recall for iLabel
f1 = fs[1]  # F1 for iLabel

但是,我如何计算整个数据集的微观和宏观度量,即如何获得(dataOUT,dataGT)对的单个微观(p,R,F)和单个宏观(p,R,F)三元组,而不是分别为每个标签?

Thx!

scikit learn中的大多数度量都支持多标签参数。sklearn.metrics.precision_recall_fscore_support如果文件上写着:

1d类阵列,或标签指示符阵列/稀疏矩阵

你可以用整个y矩阵和地真矩阵来提供度量。但这些矩阵必须具有形状[n_samples,n_labels],换句话说,矩阵的每一行都必须对应于同一样本的一组标签,每一列都对应于某个标签。所以你应该转置你的矩阵。

ps,rs,fs,ss = precision_recall_fscore_support(dataGT.T, dataOUT.T)

另请阅读本多类别和多标签分类

相关内容

  • 没有找到相关文章

最新更新