我需要计算多标签分类问题中每个类别的准确率(而不是总体准确率)。使用scikit-learn
库中的classification_report
可以很容易地找到每个类别的精确度、召回率和F分数。共有13个类别,分布如下:
精确度 召回率 F1分数 支持数 类别1 0.58 0.48 0.53 244 类别2 0.91 0.85 0.88 728 类别3 0.90 0.92 0.91 1319 类别4 0.70 0.55 0.62 533 类别5 1.00 0.10 0.18 20 类别6 0.94 0.84 0.89 2038 类别7 0.83 0.78 0.80 1930 类别8 0.85 0.44 0.58 113 类别9 0.88 0.87 0.87 1329 类别10 0.79 0.54 0.64 61 类别11 0.81 0.77 0.79 562 类别12 0.71 0.62 0.66 416 类别13 0.76 0.60 0.67 500 微平均 0.86 0.78 0.82 9793 宏平均 0.82 0.64 0.69 9793 加权平均 0.85 0.78 0.81 9793 样本平均 0.86 0.82 0.83 9793
我知道准确率可以按以下方式计算:Accuracy=(TP+TN)/(TP+TN+FP+FN)
,但是在这个多标签分类问题中找到TP
和TN
对我来说是个问题。
在stackoverflow上有一个类似的问题从精确度、召回率、F1分数计算准确率 – scikit-learn,但仅适用于二分类问题。
注意:我尝试使用multilabel_confusion_matrix
和confusion_matrix
从sklearn.metrics中提取混淆矩阵,但两者都给出了以下相同的错误:ValueError: Classification metrics can't handle a mix of multilabel-indicator and continuous-multioutput targets
有什么想法吗?
回答:
你可以使用以下代码从原始数组中手动计算每个类别的准确率:
class_accuracies = []for class_ in np.unique(y_true): class_acc = np.mean(y_pred[y_true == class_] == class_) class_accuracies.append(class_acc)