こんにちはたくまろです。今回はPythonで多変量正規分布のデータ発生させます。
はじめに、パッケージをインポートしてください。
import numpy as np
np.random.multivariate_normal()
でも出来ますが、次元数が高いと計算速度が遅いので、自分でコードを書きました。標準正規部分を発生させてから、データを変換しているためより早く多変量正規分布のデータ発生させています。高次元の正規分布からデータを速く発生させたい方はご参照ください。
###input###
# mu mean vector
# sigma covariance matrix
# n sample size
###output###
# n*d data matrix
def datagene_norm(mu,sigma,n):
d = sigma.shape[1]
Z = np.random.normal(size=[n,d])
eig_val, eig_vec = np.linalg.eig(sigma)
Gam = np.dot(eig_vec,np.diag(np.sqrt(eig_val)))
return (np.dot(Z,Gam.T) + np.array([mu for i in range(n)]))
では、実際に使ってみます。
d = 100
n = 10
mu = np.array([11 for i in range(d)])
sigma = np.diag(np.ones(d))
X = datagene_norm(mu,sigma,n)
X.shape
>> (10,100)