2017-08-13 16 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] 

しかし、これはまた、正規化された計算された混乱のMATRICEのうち、0を殺す:

は今、私は次のことについて考えました。ループ内の2x2の混乱行列のすべての平均を表し、あらかじめ充填された2x2混同行列の平均を表す混乱行列を求めたい場合、どのように進めることができますか?

#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の行列が得られます。あなたはできる:

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

これはありがとう! – inneb