当我打印出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]]
答案 0 :(得分:6)
IIUC,您的问题未定义。 “误报”,“真正的否定” - 这些是仅为二元分类定义的术语。详细了解confusion matrix的定义。
在这种情况下,混淆矩阵的维度为 N X N 。对于条目(i,i),每个对角线表示预测为 i 并且结果也是 i 的情况。任何其他非对角线条目表示预测为 i 且结果为 j 的一些错误。在这种情况下,“积极”和“消极”没有任何意义。
您可以使用np.diagonal
轻松找到诊断元素,然后很容易将它们相加。错误情况的总和是矩阵减去对角线总和的总和。
答案 1 :(得分:1)
true positive , false positive 等术语指二进制分类。而混淆矩阵的维数大于2。因此,您只能谈论已知在第i组中但预测在第j组中的观测数量(混淆矩阵的定义)。
答案 2 :(得分:1)
方法1:二进制分类
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
中每个班级的分类总数,来自"所有"小计此方法也适用于文本标签,并且可以扩展数据集中的大量样本以提供百分比报告。