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

2024-05-23 18:58:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有两个二进制稀疏矩阵,dataOUT和{},它们分别代表同一数据集的分类结果和基本真实性。两种基质的大小都是nLabels X nSamples。每个样本可以用一个或多个标签进行标记,因此如果分类器使用第i标记第j个样本,则dataOUT[i,j]为{},否则{}。在

对于任何给定的类i,我可以通过从dataOUT中提取第i行来轻松计算正则精度、召回率和F分数,dataGT可以将这些输入到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)对而不是分别为每个标签获取一个micro-(p,R,F)和一个宏-(p,R,F)三元组呢?在

谢谢!在


Tags: supportfor分类器np标签sklearnprecisionmetrics
1条回答
网友
1楼 · 发布于 2024-05-23 18:58:34

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

1d array-like, or label indicator array / sparse matrix

你只需输入整个y矩阵和基真矩阵。但这些矩阵必须有[n_samples,n_labels]的形状,换句话说,矩阵的每一行都必须对应于同一样本的一组标签,而每一列都必须对应于某个标签。所以你应该转换矩阵。在

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

同时阅读此Multiclass and multilabel classification

相关问题 更多 >