如何使用 sklearn.metrics 计算多标签分类任务的 micro/macro 度量?
How do I use sklearn.metrics to compute micro/macro measures for multilabel classification task?
我有一个多标签 class 生成器生成的结果,我想使用 python 中的 sklearn.metrics
计算微观和宏观精度、召回率和 F1 分数,但可以完全弄清楚如何。
我有两个二元稀疏矩阵,dataOUT
和 dataGT
分别表示同一数据集的 class 化结果和基本事实。两个矩阵的大小都是 nLabels X nSamples
。每个样本都可以用一个或多个标签进行标记,因此如果 class 标识符用 i
第标签标记第 j
个样本,那么 dataOUT[i,j]
就是 1
,并且 0
否则。
对于任何给定的 class i
,我可以通过从 dataOUT
和 [=15] 中提取第 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
但是我如何计算整个数据集的微观和宏观测量,即如何获得单个微观 (P,R,F) 和单个宏观 (P,R,F) 三元组为 (dataOUT,dataGT)
对而不是分别为每个标签?
谢谢!
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)
我有一个多标签 class 生成器生成的结果,我想使用 python 中的 sklearn.metrics
计算微观和宏观精度、召回率和 F1 分数,但可以完全弄清楚如何。
我有两个二元稀疏矩阵,dataOUT
和 dataGT
分别表示同一数据集的 class 化结果和基本事实。两个矩阵的大小都是 nLabels X nSamples
。每个样本都可以用一个或多个标签进行标记,因此如果 class 标识符用 i
第标签标记第 j
个样本,那么 dataOUT[i,j]
就是 1
,并且 0
否则。
对于任何给定的 class i
,我可以通过从 dataOUT
和 [=15] 中提取第 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
但是我如何计算整个数据集的微观和宏观测量,即如何获得单个微观 (P,R,F) 和单个宏观 (P,R,F) 三元组为 (dataOUT,dataGT)
对而不是分别为每个标签?
谢谢!
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)