繁体   English   中英

如何分析混淆矩阵?

[英]How can I analyze a confusion matrix?

当我打印出 scikit-learn 的混淆矩阵时,我收到了一个非常大的矩阵。 我想分析什么是真阳性、真阴性等。我该怎么做? 这就是我的混淆矩阵的样子。 我希望更好地理解这一点。

[[4015  336    0 ...,    0    0    2]
 [ 228 2704    0 ...,    0    0    0]
 [   4    7   19 ...,    0    0    0]
 ..., 
 [   3    2    0 ...,    5    0    0]
 [   1    1    0 ...,    0    0    0]
 [  13    1    0 ...,    0    0   11]]

IIUC,您的问题未定义。 “假阳性”、“真阴性”——这些是仅针对二元分类定义的术语。 阅读有关混淆矩阵定义的更多信息。

在这种情况下,混淆矩阵的维度为NXN 对于条目(i, i) ,每个对角线表示预测为i且结果也是i 的情况 任何其他非对角线条目表示预测为i而结果为j 的错误 在这种情况下,“正面”和“负面”没有任何意义。

您可以使用np.diagonal轻松找到诊断元素,然后很容易对它们求和。 错误案例的总和是矩阵的总和减去对角线的总和。

真阳性假阳性等术语指的是二元分类 而混淆矩阵的维数大于二。 所以你只能谈论已知在组 i 中但预测在组 j 中的观察数量(混淆矩阵的定义)。

方法一:二元分类

from sklearn.metrics import confusion_matrix as cm
import pandas as pd

y_test = [1, 0, 0]
y_pred = [1, 0, 0]
confusion_matrix=cm(y_test, y_pred)

list1 = ["Actual 0", "Actual 1"]
list2 = ["Predicted 0", "Predicted 1"]
pd.DataFrame(confusion_matrix, list1,list2)

在此处输入图片说明

方法 2:多类分类

虽然 sklearn.metrics.confusion_matrix 提供了一个数字矩阵,但您可以使用以下内容生成“报告”:

import pandas as pd
y_true = pd.Series([2, 0, 2, 2, 0, 1, 1, 2, 2, 0, 1, 2])
y_pred = pd.Series([0, 0, 2, 1, 0, 2, 1, 0, 2, 0, 2, 2])

pd.crosstab(y_true, y_pred, rownames=['True'], colnames=['Predicted'], margins=True)

这导致:

Predicted  0  1  2  All
True                   
0          3  0  0    3
1          0  1  2    3
2          2  1  3    6
All        5  2  5   12

这让我们看到:

  1. 对角线元素显示每个类别的正确分类数:类别 0、1 和 2 分别为 3、1 和 3。
  2. 非对角元素提供了错误分类:例如,2 类中有 2 个被错误分类为 0,0 类中没有一个被错误分类为 2,等等。
  3. y_truey_pred每个类的分类y_pred ,来自“全部”小计

这种方法也适用于文本标签,并且对于数据集中的大量样本可以扩展以提供百分比报告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM