节省混淆矩阵

时间:2017-07-16 09:01:14

标签: python pandas dataframe confusion-matrix

是否有可能保存由sklearn.metrics生成的混淆矩阵?

我想在数组中保存不同分类算法的多个结果,或者可能是pandas数据框,这样我就可以看出哪种算法效果最好。

print('Neural net: \n',confusion_matrix(Y_test, Y_pred), sep=' ')

如何在循环中保存生成的混淆矩阵? (我正在训练一组200个不同的目标变量)

array[i] = confusion_matrix(Y_test,Y_pred) 

我在这里遇到一些定义问题[数组没有定义,而非[i] - 版本运行顺利]

此外,我正在规范混淆矩阵。如何在整个循环后打印出混淆矩阵的平均结果? (200个不同混淆矩阵的平均值)

我对python还不是很流利。

2 个答案:

答案 0 :(得分:1)

首先得到数组未定义的问题。 在python列表中声明为:

array=[]

由于在声明期间未给出列表大小,因此不会分配空间。因此,我们无法为未分配的地点分配值。

array[i]=some value, but no space is allocated for array

因此,如果您知道所需的数组大小,请在声明期间填充零并使用此方式使用数组,或在循环内使用array.append()方法。

现在用于保存混淆矩阵: 由于混淆矩阵返回二维数组并且您需要保存多个此类数组,因此请使用三维数组来保存该值。

import numpy as np
matrix_result=np.zeroes((200,len(y_pred),len(y_pred)))
for i in range(200):
    matrix_result[i]=confusion_matrix(X_pred,y_pred)

进行平均

   matrix_result_average=matrix_result.mean(axis=0)

答案 1 :(得分:0)

我不确定你对一组目标变量进行训练是什么意思(请详细说明),但这里是使用numpy对混淆矩阵求平均值的开始。

首先创建一个空的结果矩阵,它是三维的,并且是200个堆叠的混淆矩阵的大小。然后在for循环中逐个填充它们。最后,得到的矩阵沿着目标的维度进行平均,得到平均混淆矩阵。

import numpy as np

N = len(Y_pred)
result = np.zeros((len(targets), N, N))
for i, target in enumerate(targets):
    result[i] = confusion_matrix(Y_test, Y_pred) # do someting with target?
print(result.mean(axis=0))