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

Python 如何使用sklearn.metrics计算多标签分类任务的微观/宏观度量?,python,scikit-learn,precision-recall,Python,Scikit Learn,Precision Recall,我有一个多标签分类器产生的结果,我想用python中的sklearn.metrics计算微观和宏观精度、召回率和F1分数,但我不太清楚如何计算 我有两个二进制稀疏矩阵,dataOUT和dataGT,分别表示同一数据集的分类结果和基本事实。这两个矩阵的大小都是nLabels X nSamples。每个样本可以用一个或多个标签标记,因此如果分类器用ith标签标记jth样本,则dataOUT[i,j]为1,否则为0 对于任何给定的类i,我都可以通过从dataOUT中提取ith行来轻松计算常规精度、召回

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

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

对于任何给定的类
i
,我都可以通过从
dataOUT
中提取
i
th行来轻松计算常规精度、召回率和F分数,
dataGT
可以将这些行提供给
sklearn.metrics.precision\u recall\u fscore\u 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)三元组


谢谢

scikit learn中的大多数指标都支持多标签参数。 如果文件说明:

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

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

ps,rs,fs,ss = precision_recall_fscore_support(dataGT.T, dataOUT.T)
也读一下这个