Search on the blog

2015年12月2日水曜日

多変量正規分布の形

 共分散行列の形が変わった時に、多変量正規分布の形がどう変わるのかイメージできなかったのでpyplotで図を書いてみた。

 まず簡単な形から。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal

x, y =  np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100))
pos = np.dstack((x, y))

cov_matrix = [[1,0],[0,1]]
gauss = multivariate_normal(mean=[0,0], cov=cov_matrix)
plt.contourf(x, y, gauss.pdf(pos))
plt.axis('equal')
plt.axis([-3, 3, -3, 3])
plt.show()

これはどういう形になるか予想できる。
次に共分散行列の形を以下のように変えてみる。

cov_matrix = [[1,0],[0,3]]

これも予想できる。y軸方向に長い楕円になる。
次に非対角成分の値を変えてみる。

cov_matrix = [[1,0.5],[0.5,1]]

うーむ、軸がずれるのは予想してたけど、どの向きに軸がずれるのかがイメージできない。ちょっと考えてみて、

_, v = np.linalg.eig(cov_matrix)
print v
とすると、

[[ 0.70710678 -0.70710678]
[ 0.70710678  0.70710678]]

と表示されて、ああそうかと納得した。

固有ベクトルを軸にとってるわけか。
さらに共分散行列は対称行列なので固有ベクトルは直交すると。
よく出来てるなー。

0 件のコメント:

コメントを投稿