まず簡単な形から。
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 件のコメント:
コメントを投稿