首页 文章

是否有一种简单的方法来获得多类分类的混淆矩阵? (OneVsRest)

提问于
浏览
5

我在三类分类问题上使用OneVsRest分类器(三个随机森林) . 每个类的出现都是我的虚拟整数(1表示发生,0表示否则) . 我想知道是否有一种简单的替代方法来创建混淆矩阵?正如我遇到的所有方法一样,以y_pred,y_train = array,shape = [n_samples]的形式获取参数 . 理想情况下,我想要y_pred,y_train = array,shape = [n_samples,n_classes]

一些样本,类似于问题的结构:

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


print(metrics.confusion_matrix(y_train, y_pred)

退货:不支持多标签指标

2 回答

  • 7

    我不知道你有什么想法,因为你没有指定你想要的输出,但是有两种方法可以解决它:

    1.One confusion matrix per column

    In [1]:
    for i in range(y_train.shape[1]):
        print("Col {}".format(i))
        print(metrics.confusion_matrix(y_train[:,i], y_pred[:,i]))
        print("")
    
    Out[1]:
    Col 0
    [[1 1]
     [2 1]]
    
    Col 1
    [[2 2]
     [1 0]]
    
    Col 2
    [[4 0]
     [0 1]]
    

    2.One confusion matrix altogether

    为此,我们将展平数组:

    In [2]: print(metrics.confusion_matrix(y_train.flatten(), y_pred.flatten()))
    
    Out[2]:
    [[7 3]
     [3 2]]
    
  • 1

    您可以尝试以下方式一次性获取所有详细信息 .

    from sklearn.metrics import confusion_matrix
    confusion_matrix(y_test.argmax(axis=1), y_pred.argmax(axis=1))
    

    这将为您提供如下内容:

    array([[ 7,  0,  0,  0],
           [ 0,  7,  0,  0],
           [ 0,  1,  2,  4],
           [ 0,  1,  0, 11]])
    
    • 这意味着所有对角线都能正确预测 .

相关问题