混同行列はnumpyの行列ですので、単純にnumpyとしての分割手段を探れば良いです。
以下は縦横2分割の例です。
Python
1import numpy as np
2from sklearn.metrics import confusion_matrix
3
4x = [1, 2, 0, 2, 5, 4, 1, 3]
5y = [5, 1, 1, 1, 2, 2, 2, 3]
6
7conf = confusion_matrix(x, y)
8print(conf)
9#[[0 1 0 0 0 0]
10# [0 0 1 0 0 1]
11# [0 2 0 0 0 0]
12# [0 0 0 1 0 0]
13# [0 0 1 0 0 0]
14# [0 0 1 0 0 0]]
15
16conf0 = np.array_split(conf, 2, axis=0) # 分割数は2
17conf1 = [np.array_split(c, 2, axis=1) for c in conf0] # 分割数は2
18
19print(conf1[0][0])
20#[[0 1 0]
21# [0 0 1]
22# [0 2 0]]
23print(conf1[0][1])
24#[[0 0 0]
25# [0 0 1]
26# [0 0 0]]
27print(conf1[1][0])
28#[[0 0 0]
29# [0 0 1]
30# [0 0 1]]
31print(conf1[1][1])
32#[[1 0 0]
33# [0 0 0]
34# [0 0 0]]
35
なお、numpyはindexを保持しませんので分割すると、元のクラス値は直接にはわからなくなります。ただし、以下のconf1のリスト位置(添字)により再現は可能ですので、特に対応はしていません。index値やcolum値も持ち越すにはpandasを使う必要がありますが、後の用途によっては必ずしもpandas化がよいとは限りませんので、その手法は採用しませんでした。上記の応用として簡単ですので、必要ならば質問者様でチャレンジ願います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/14 02:52