是否有可能保存由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还不是很流利。
答案 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))