[英]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
这让我们看到:
y_true
和y_pred
每个类的分类y_pred
,来自“全部”小计这种方法也适用于文本标签,并且对于数据集中的大量样本可以扩展以提供百分比报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.