首页 > 解决方案 > 从 pd.crosstab 中的混淆矩阵中找到准确度

问题描述

使用pd.crosstab,我可以从我的预测数据中生成一个混淆矩阵。我使用以下行来生成混淆矩阵:

pd.crosstab(test_data['class'], test_data['predicted'], margins = True)

同样在 R 中,我可以使用下面的行生成混淆矩阵

confusion_matrix <- table(truth = data.test$class, prediction = predict(model, data.test[,-46], type = 'class'))

在 RI 中可以使用这条线找到我的模型的准确性

sum(diag(confusion_matrix)) / sum(confusion_matrix)

在 Python 中,是否有等效的方法sum(diag(confusion_matrix)) / sum(confusion_matrix)来计算我的混淆矩阵的准确性?

我宁愿不使用除 pandas 之外的任何库(例如 Scikit learn)。

标签: pythonrpython-3.xpandasconfusion-matrix

解决方案


您需要使用numpy,首先np.diag在交叉表产品上使用以获得对角线的总和,然后在求和之前将交叉表产品转换为 numpy 数组:

import numpy as np
np.random.seed(123)
test_data = pd.DataFrame({'class':np.random.randint(0,2,10),
                        'predicted':np.random.randint(0,2,10)})

tab = pd.crosstab(test_data['class'], test_data['predicted'])

predicted   0   1
class       
0   4   3
1   0   3

tab = pd.crosstab(test_data['class'], test_data['predicted'])
np.diag(tab).sum() / tab.to_numpy().sum()
0.7

还是硬编码?不知道你为什么要这样做:

(tab.iloc[0,0] + tab.iloc[1,1]) / tab.to_numpy().sum()

推荐阅读