@Glen_bは良い回答(+1)を出しました。これをいくつかのコードで説明します。
与えられた共分散行列次元の多変量ガウス分布からサンプルを生成する方法は?これは、標準のガウス分布からサンプルを生成し、それらに共分散行列の平方根を乗算することにより、たとえばによって簡単に実行できます。これは、CVの多くのスレッドでカバーされています。たとえば、次のように、事前に指定された相関行列でデータを生成するにはどうすればよいですか Matlabの簡単な実装を次に示します。D Σ C 、H 、O L(Σ )ndΣc h o l(Σ)
n = 100;
d = 2;
Sigma = [ 1 0.7 ; ...
0.7 1 ];
rng(42)
X = randn(n, d) * chol(Sigma);
結果のデータのサンプル共分散行列は、もちろん正確にははありません。たとえば、上記の例ではΣcov(X)
1.0690 0.7296
0.7296 1.0720
事前に指定されたサンプル相関または共分散行列でデータを生成する方法は?
@Glen_bが書いたように、標準のガウス分布からデータを生成した後、サンプルの共分散行列持つように、中心化、白色化、標準化ます。それから乗算します。c h o l(Σ )私c h o l(Σ)
Matlabの例の続きを次に示します。
X = randn(n, d);
X = bsxfun(@minus, X, mean(X));
X = X * inv(chol(cov(X)));
X = X * chol(Sigma);
今cov(X)
、必要に応じて、リターン
1.0000 0.7000
0.7000 1.0000