我正在使用scikit学习决策树,将一组数据分类为四个类别之一。我是机器学习和编码的新手,并且正在尝试了解混淆矩阵。
因此,当我使用sci-kits混淆矩阵时,我得到的是四乘四矩阵。我能够确定这些列是针对每个类别做出的预测(例如“ Predicted A,Predicted B ...”)。但是,我对行代表什么感到困惑。同样,某些预测可能不会使其进入混淆矩阵。我发现有些列没有必要的总数。为什么会这样?
unique, counts = np.unique(classif_predict, return_counts=True)
print('Predicted:',dict(zip(unique, counts)))
_unique, _counts = np.unique(classif_test, return_counts=True)
print('Tested:',dict(zip(_unique, _counts)))
pd.DataFrame(
confusion_matrix(classif_test, class_predict),
columns = ['AGN Predicted', 'BeXRB Predicted', 'HMXB Predicted', 'SNR Predicted']
)
我的输出看起来像这样:
Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2}
Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}
AGN Predicted BeXRB Predicted HMXB Predicted SNR Predicted
3 3 4 0
2 13 6 1
0 3 4 0
0 2 0 0
```
一个混淆矩阵将帮助您确定模型分类的正确与错误。仅需两节课就可以轻松理解它。
这里是混淆矩阵的工作方式:
在此矩阵中,我们只有两个可能的类别:“否”和“是”。列表示预测值,而线表示实际(真)值。这个矩阵关于评估模型的意思是:
[将50个样本分类为“否”。 (那些被称为True Negatives
] >>分类错误
错误分类
True Positives
在两种情况下的总数为165,这是评估的样本总数。
专门针对您的问题:当您制作4x4混淆矩阵时,逻辑原理是相同的,每个“额外”类都会添加额外的行和列。在您的输出中,总和都可以:
Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2} Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}
假设“已测试”是您的真实价值:
这意味着您有10个“ AGN”样本,但是您的模型仅对7个样本进行了分类(显然只有3个正确)。
您的混淆矩阵似乎已转置,这意味着True值是列,而预测值是线。不知道为什么,我不认为这是sklearn的默认行为。
True AGN True BeXRB True HMXB True SNR
AGN Pred 3 3 4 0
BeXRB Pred 2 13 6 1
HMXB Pred 0 3 4 0
SNR Pred 0 2 0 0