python-3.x - 如何解释这个 10*10 混淆矩阵?

标签 python-3.x confusion-matrix

下面是包含 10 个 Y 类别的混淆矩阵。如何计算 A、D 和 E 类别的准确度,并找到每个类别的 TP、TM、FP、FN?

    A    B   C   D   E   F   G   H   I   J
   [41,  0,  0,  2,  1,  0,  0,  0,  0,  4],
   [ 1,  0,  0,  0,  4,  0,  0,  0,  0,  2],
   [ 3,  0, 12,  0,  1,  0,  0,  0,  0,  0],
   [ 0,  0,  0, 51, 10,  0,  0,  0,  0,  0],
   [ 1,  0,  0,  3, 78,  0,  0,  0,  0,  5],
   [ 1,  0,  0,  0,  0,  0,  0,  0,  0,  3],
   [ 4,  0,  0,  0,  2,  0,  5,  0,  0,  4],
   [ 0,  0,  1,  1,  3,  0,  0,  2,  0,  1],
   [ 4,  0,  0,  0,  1,  0,  0,  0,  0,  0],
   [10,  0,  0,  5, 15,  0,  0,  0,  0, 24]

感谢您的帮助!

最佳答案

可视化您的混淆矩阵

X = [[41, 0, 0, 2, 1, 0, 0, 0, 0, 4],
 [1, 0, 0, 0, 4, 0, 0, 0, 0, 2],
 [3, 0, 12, 0, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 51, 10, 0, 0, 0, 0, 0],
 [1, 0, 0, 3, 78, 0, 0, 0, 0, 5],
 [1, 0, 0, 0, 0, 0, 0, 0, 0, 3],
 [4, 0, 0, 0, 2, 0, 5, 0, 0, 4],
 [0, 0, 1, 1, 3, 0, 0, 2, 0, 1],
 [4, 0, 0, 0, 1, 0, 0, 0, 0, 0],
 [10, 0, 0, 5, 15, 0, 0, 0, 0, 24]]

cm = pd.DataFrame(X, columns=list("ABCDEFGHIJ"), index=list("ABCDEFGHIJ")) 

print(cm)

输出:

    A  B   C   D   E  F  G  H  I   J
A  41  0   0   2   1  0  0  0  0   4
B   1  0   0   0   4  0  0  0  0   2
C   3  0  12   0   1  0  0  0  0   0
D   0  0   0  51  10  0  0  0  0   0
E   1  0   0   3  78  0  0  0  0   5
F   1  0   0   0   0  0  0  0  0   3
G   4  0   0   0   2  0  5  0  0   4
H   0  0   1   1   3  0  0  2  0   1
I   4  0   0   0   1  0  0  0  0   0
J  10  0   0   5  15  0  0  0  0  24

读取混淆矩阵的过程如下:行是实际标签,列是预测标签。完美的模型应该有一个对角线混淆矩阵,因为它总是能正确预测! Read more on confusion matrices .

在这里,您可以看到您的模型有时是错误的。它预测了 A 10 次,而答案实际上是 J...但它对于类别 G 特别有用:预测了 5 次,它总是对的!

类别准确性

类别准确度是通过计算您预测正确的次数(在您预测的所有次数中)来获得的:

>>> cm["A"]["A"] / cm.sum(axis=0)["A"]                                                                                                               
0.6307692307692307

>>> cm["D"]["D"] / cm.sum(axis=0)["D"]                                                                                                               
0.8225806451612904

>>> cm["E"]["E"] / cm.sum(axis=0)["E"]                                                                                                               
0.6782608695652174

TP、TN、FP、FN 分别

这些度量通常在二元分类设置中有意义,但对于给定的类别,您可以想象处于一对多(考虑的类别与所有其他分类)设置中,这看起来像二元分类,因此计算这些度量.

利用 this answer ,您可以使用以下命令获取每个类别的所有 TP、TN、FP、FN 值:

FP = cm.sum(axis=0) - np.diag(cm)   
FN = cm.sum(axis=1) - np.diag(cm) 
TP = pd.Series(np.diag(cm), index=list("ABCDEFGHIJ"))
TN = np.matrix(cm).sum() - (FP + FN + TP)  

现在,类别 A 的 FP 是:

>>> FP["A"]
24  #  you can verify, it's the sum of all values except diagonal element

相同的逻辑适用于所有其他措施。

关于python-3.x - 如何解释这个 10*10 混淆矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61389262/

相关文章:

python - 多标签混淆矩阵

python - 使用比特流

javascript - 用于数据可视化的交互式混淆矩阵

Python MVC 风格的 GUI 温度转换器

带有网络存档的 Python 报纸(回归机器)

python - 如何有效地进行类到集群匹配以计算结果精度

machine-learning - 如何解读scikit的learn混淆矩阵和分类报告?

python - 基准测试 python(命令行)

javascript - 使用 selenium 从 ExtJS 网格行获取数据