我有3个独立的分类器,交叉验证10次。 我每次输出一个混淆矩阵(每次运行/折叠):
cm = pd.crosstab(pd.Series(y_pred), pd.Series(y_test), rownames=['Predicted'], colnames=['Actual'], margins=True)
我的问题是,有什么方法可以创建平均混淆矩阵吗?除非我必须,否则我宁愿使用熊猫而不是sklearn的cm。
答案 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