2017-08-13 270 views
2

我目前正在計算多個混淆矩陣並對它們進行歸一化。計算混淆矩陣

for i in range(0,215) 

[...] 
matrix_confusion[i] = np.asarray(confusion_matrix(Y_test, Y_pred)) 
matrix_confusion[i] = matrix_confusion[i].astype(float)/
matrix_confusion[i].sum(axis=1)[:,np.newaxis] 

目標是計算填充在上面循環中的所有混淆矩陣中的平均值。問題是很多矩陣沒有被填充,因爲我在引發ValueError時忽略了迭代。所以我有一些空的矩陣(預填零)。

現在我想過做以下幾點:

matrix_confusion = matrix_confusion[matrix_confusion!=0] 

但是,這也殺死0出標準化的計算混淆矩陣的計算的。如果我只想要一個混淆矩陣,它代表所有先前填充的2×2混淆矩陣的均值,並且不對預填充的矩陣進行合併,我該怎麼辦?

#prefilling 
matrix_confusion = np.zeros((200,2,2)) 

感謝您的幫助!

回答

1

首先發現非全零矩陣:

valids = np.logical_or.reduce(matrix_confusion != 0, axis=(1, 2)) 

然後計算平均值:

matrix_confusion_mean = np.mean(matrix_confusion[valids], axis=0) 

你仍然應該小心,至少一些矩陣是有效的,否則你將得到NaN s的矩陣。你可以這樣做:

if np.any(valids): 
    matrix_confusion_mean = np.mean(matrix_confusion[valids], axis=0) 
else: 
    matrix_confusion_mean = np.zeros((2, 2)) 
+0

這個作品謝謝! – inneb