Skip to main content
 首页 » 编程设计

python之使用 Sklearn 的多类多标签混淆矩阵

2025年05月04日9birdshome

我正在处理来 self 的分类器的多类多标签输出。类的总数为 14,实例可以关联多个类。例如:

y_true = np.array([[0,0,1], [1,1,0],[0,1,0]) 
y_pred = np.array([[0,0,1], [1,0,1],[1,0,0]) 

我现在制作混淆矩阵的方式:

matrix = confusion_matrix(y_true.argmax(axis=1), y_pred.argmax(axis=1)) 
print(matrix) 

输出如下:

[[ 79   0   0   0  66   0   0 151   1   8   0   0   0   0] 
 [  4   0   0   0  11   0   0  27   0   0   0   0   0   0] 
 [ 14   0   0   0  21   0   0  47   0   1   0   0   0   0] 
 [  1   0   0   0   4   0   0  25   0   0   0   0   0   0] 
 [ 18   0   0   0  50   0   0  63   0   3   0   0   0   0] 
 [  4   0   0   0   3   0   0  19   0   0   0   0   0   0] 
 [  2   0   0   0   3   0   0  11   0   2   0   0   0   0] 
 [ 22   0   0   0  20   0   0 138   1   5   0   0   0   0] 
 [ 12   0   0   0   9   0   0  38   0   1   0   0   0   0] 
 [ 10   0   0   0   3   0   0  40   0   4   0   0   0   0] 
 [  3   0   0   0   3   0   0  14   0   3   0   0   0   0] 
 [  0   0   0   0   2   0   0   3   0   0   0   0   0   0] 
 [  2   0   0   0  11   0   0  32   0   0   0   0   0   0] 
 [  0   0   0   0   0   0   0   3   0   0   0   0   0   7]] 

现在,我不确定 sklearn 的混淆矩阵是否能够处理多标签多类数据。有人可以帮我吗?

请您参考如下方法:

现在你可以使用(版本 0.21)sklearn.metrics.multilabel_confusion_matrix

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.multilabel_confusion_matrix.html

我们尝试为每个示例预测两个标签

import sklearn.metrics as skm 
y_true = np.array([ 
                [0,0], [0,1], [1,1], [0,1], [0,1], [1,1] 
              ]) 
 y_pred = np.array([ 
                [1,1], [0,1], [0,1], [1,0], [0,1], [1,1]  
              ]) 
 
 cm = skm.multilabel_confusion_matrix(y_true, y_pred) 
 print(cm) 
 print( skm.classification_report(y_true,y_pred)) 

标签的混淆矩阵:

[[[2 2] 
  [1 1]] 
 
 [[0 1] 
  [1 4]]] 

分类报告:

              precision    recall  f1-score   support 
 
         0       0.33      0.50      0.40         2 
         1       0.80      0.80      0.80         5 
 
micro avg        0.62      0.71      0.67         7 
macro avg        0.57      0.65      0.60         7 
weighted avg     0.67      0.71      0.69         7 
samples avg      0.67      0.58      0.61         7