如何打印混淆矩阵的标签和列名?

Posted

技术标签:

【中文标题】如何打印混淆矩阵的标签和列名?【英文标题】:How to print labels and column names for Confusion Matrix? 【发布时间】:2019-07-19 10:13:42 【问题描述】:

我得到了混淆矩阵,但由于我的实际数据集有很多分类类别,所以很难理解。

例子-

>>> from sklearn.metrics import confusion_matrix
>>> y_test
['a', 'a', 'b', 'c', 'd', 'd', 'e', 'a', 'c']
>>> y_pred
['b', 'a', 'b', 'c', 'a', 'd', 'e', 'a', 'c']
>>> 
>>> 
>>> confusion_matrix(y_test, y_pred)
array([[2, 1, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 2, 0, 0],
       [1, 0, 0, 1, 0],
       [0, 0, 0, 0, 1]], dtype=int64)

但是如何打印标签/列名以便更好地理解?

我什至试过这个 -

>>> pd.factorize(y_test)
(array([0, 0, 1, 2, 3, 3, 4, 0, 2], dtype=int64), array(['a', 'b', 'c', 'd', 'e'], dtype=object))
>>> pd.factorize(y_pred)
(array([0, 1, 0, 2, 1, 3, 4, 1, 2], dtype=int64), array(['b', 'a', 'c', 'd', 'e'], dtype=object))

有什么帮助吗?

【问题讨论】:

The docs for confusion_matrixlabels 参数下说:如果没有给出,则在y_truey_pred 中至少出现一次的那些将按排序顺序使用。 所以标签就是a b c d e,按顺序排列。 【参考方案1】:

试试这样的:

from sklearn.metrics import confusion_matrix
import pandas as pd
import numpy as np
y_test = ['a', 'a', 'b', 'c', 'd', 'd', 'e', 'a', 'c']
y_pred = ['b', 'a', 'b', 'c', 'a', 'd', 'e', 'a', 'c']


labels = np.unique(y_test)
a =  confusion_matrix(y_test, y_pred, labels=labels)

pd.DataFrame(a, index=labels, columns=labels)

输出:

   a  b  c  d  e
a  2  1  0  0  0
b  0  1  0  0  0
c  0  0  2  0  0
d  1  0  0  1  0
e  0  0  0  0  1

【讨论】:

嗨 Scott,我继续下一个问题 - ***.com/questions/54891276/… @ranit.b 不考虑任何后续问题,因为目前的答案解决了您的问题并准确交付了您的要求,请接受 当然@desertnaut。最初将其标记为有用,但现在也接受了。谢谢。 (仍然是 SO 的新手;只是学习。)

以上是关于如何打印混淆矩阵的标签和列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何打印大维度的混淆矩阵

如何使用 Tensorflow 创建预测标签和真实标签的混淆矩阵?

如何使用 Tensorflow 创建预测标签和真实标签的混淆矩阵?

如何知道混淆矩阵的实际标签顺序?

如何标准化混淆矩阵?

如何根据预测的类别概率准备混淆矩阵?