我正在使用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
```
答案 0 :(得分:0)
混淆矩阵将帮助您确定模型分类的正确与否。仅需两节课就可以思考它。
以下是混淆矩阵的工作原理:
在此矩阵中,我们只有两个可能的类:“否”和“是”。列表示预测值,而线表示实际(真)值。这个矩阵关于评估模型的意思是:
正确将50个样本分类为“否”。 (这些被称为真实否定词)
分类错误 5个样本为“否”,而这些样本本应为“是”。 (这些被称为假阴性)
分类错误的10个样本为“是”,而应为“否”。 (这些称为误报)
正确将100个样本分类为“是”。 (这些被称为 True Positives )。
要检查每个类上有多少个预测,您必须对各列中的值求和:该模型预测了55个“否”和110个“是”。
要检查每个类上有多少个真实样本,您必须对行中的值求和:样本真实为60个“否”和105个“是”。
两种情况下的总数为165,这是评估的样本总数。
专门针对您的问题:
当您制作4x4混淆矩阵时,逻辑原理是相同的,每个“额外”类都会添加额外的行和列。在您的输出中,总和都可以:
Predicted: {'AGN': 7, 'BeXRB': 25, 'HMXB': 7, 'SNR': 2}
Tested: {'AGN': 10, 'BeXRB': 22, 'HMXB': 7, 'SNR': 2}
假设“已测试”是您的真实价值:
编辑:
矩阵上的值与 PREDICTED 输出(dict)中的值不匹配,您可能会检查:(我添加了SUM列和行)
Pred AGN Pred BeXRB Pred HMXB Pred SNR SUM
AGN True 3 3 4 0 10
BeXRB True 2 13 6 1 22
HMXB True 0 3 4 0 7
SNR True 0 2 0 0 2
SUM: 5 21 14 1
根据您提供的信息量,我将无法为您提供更多帮助,但是您应该检查classif_predict
数组。
如果您使用的是Jupyter Notebook,由于变量值的更改,以不同顺序运行的单元可能会引发这种行为。如果是这种情况,请尝试按预期的顺序再次运行。
答案 1 :(得分:0)
行代表已预测的类的实例(通过我们使用的算法),列代表已知真实值的实例。
行:预测值 列:实际值
在您的情况下,了解 4*4 矩阵表示您的预测变量中有 4 个不同的值,即:AGN、BeXRB、HMXB、SNR。 还有一件事,值的正确分类将位于从左上角到右下角的对角线上,而所有其他值都被错误分类。
this is an example of a 4*4 matrix 请注意,绿色值将被正确分类,红色值将被错误分类。