熊猫:无论如何要平均不同的混淆矩阵?

时间:2017-05-16 01:41:35

标签: python pandas confusion-matrix

我有3个独立的分类器,交叉验证10次。 我每次输出一个混淆矩阵(每次运行/折叠):

cm = pd.crosstab(pd.Series(y_pred), pd.Series(y_test), rownames=['Predicted'], colnames=['Actual'], margins=True)

我的问题是,有什么方法可以创建平均混淆矩阵吗?除非我必须,否则我宁愿使用熊猫而不是sklearn的cm。

1 个答案:

答案 0 :(得分:0)

您可以concatenate交叉制表框架,groupby他们的索引值并获取他们的means

import numpy as np
import pandas as pd

# some random data frames
y_pred = np.random.randint(0, 2, 10)
y_test = np.random.randint(0, 2, 10)
cm1 = pd.crosstab(pd.Series(y_pred), pd.Series(y_test), rownames=['Predicted'], colnames=['Actual'], margins=True)
...

print(cm1)
Actual  0   1   All
Predicted           
0       2   4   6
1       1   3   4
All     3   7   10

print(cm2)    
Actual  0   1   All
Predicted           
0       6   2   8
1       1   1   2
All     7   3   10

pandas.concat()将序列作为其第一个参数(pandas对象被连接),因此您可以通过给出列表或元组来连接任意多个。

cm_concat = pd.concat((cm1, cm2))
cm_group = cm_concat.groupby(cm_concat.index)

cm_group.mean()

导致:

    Actual  0   1   All
Predicted           
0           4   3   7
1           1   2   3
All         5   5   10