我如何解释这个 10*10 混淆矩阵?
How do I interpret this 10*10 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
:在预测的五次中,它总是正确的!
类别准确度
在所有的预测次数中,统计你预测好多少次就得到一个类别准确率:
>>> 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
这些措施通常在二元分类设置中有意义,但对于给定的类别,您可以想象处于一对多(考虑的类别与所有其他类别)设置中,这看起来像二元分类,因此计算这些措施。
利用 ,您可以使用以下方法获取每个类别的所有 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
同样的逻辑适用于所有其他措施。
要补充另一个答案,真阳性和假阳性以及其他指标仅在二项式响应的情况下才有意义。此维基百科页面对此进行了更详细的概述:
在上述情况下,您不一定能计算出总体 TP 或 FP 率,但您可以计算 False 'A' 和 True 'A' 等等,如上面的答案中所述.
我在混淆矩阵下面有 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
:在预测的五次中,它总是正确的!
类别准确度
在所有的预测次数中,统计你预测好多少次就得到一个类别准确率:
>>> 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
这些措施通常在二元分类设置中有意义,但对于给定的类别,您可以想象处于一对多(考虑的类别与所有其他类别)设置中,这看起来像二元分类,因此计算这些措施。
利用
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
同样的逻辑适用于所有其他措施。
要补充另一个答案,真阳性和假阳性以及其他指标仅在二项式响应的情况下才有意义。此维基百科页面对此进行了更详细的概述:
在上述情况下,您不一定能计算出总体 TP 或 FP 率,但您可以计算 False 'A' 和 True 'A' 等等,如上面的答案中所述.