0

長さ n の 2 つのベクトル Ytrue と Ypredicted で提示されるケースをカウントする混乱/偶発行列 M (いずれかの次元がクラスの数に等しい正方行列) を計算するワンライナーを書きたいと思います。明らかに、以下は python と numpy を使用すると機能しません:

error = N.array([error[x,y]+1 for x, y in zip(Ytrue,Ypredicted)]).reshape((n,n))

ワンライナー行列混同計算機を作成するためのヒントはありますか?

4

2 に答える 2

4
error = N.array([zip(Ytrue,Ypred).count(x) for x in itertools.product(classes,repeat=2)]).reshape(n,n)

また

error = N.array([z.count(x) for z in [zip(Ytrue,Ypred)] for x in itertools.product(classes,repeat=2)]).reshape(n,n)

後者はより効率的ですが、より混乱を招く可能性があります。

import numpy as N
import itertools

Ytrue = [1,1,1,1,1,1,1,1,
         2,2,2,2,2,2,2,2,
         3,3,3,3,3,3,3,3]
Ypred = [1,1,2,1,2,1,3,1,
         2,2,2,2,2,2,2,2,
         3,3,2,2,2,1,1,1]

classes = list(set(Ytrue))
n = len(classes)

error = N.array([zip(Ytrue,Ypred).count(x) for x in itertools.product(classes,repeat=2)]).reshape(n,n)
print error

error = N.array([z.count(x) for z in [zip(Ytrue,Ypred)] for x in itertools.product(classes,repeat=2)]).reshape(n,n)
print error

生産する

[[5 2 1]
 [0 8 0]
 [3 3 2]]

[[5 2 1]
 [0 8 0]
 [3 3 2]]
于 2012-06-09T06:18:51.510 に答える
2

NumPy が 1.6 以降で、Ytrue と Ypred が NumPy 配列の場合、このコードは機能します

np.bincount(n * (Ytrue - 1) + (Ypred -1), minlength=n*n).reshape(n, n)
于 2012-06-10T10:44:53.950 に答える