@Glen_b给出了一个很好的答案(+1),我想用一些代码来说明。
如何从具有给定协方差矩阵Σ的d维多元高斯分布中生成样本?通过从标准高斯生成样本并将其乘以协方差矩阵的平方根(例如,乘以c h o l(Σ )),即可轻松做到这一点。这在CV的许多线程中都有介绍,例如:在这里:如何使用预先指定的相关矩阵生成数据?这是一个简单的Matlab实现:ndΣchol(Σ)
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所写,在从标准高斯生成数据之后,将其居中,加白并标准化,以使其具有样本协方差矩阵;然后将其与相乘。Ç ħ ø 升(Σ )Ichol(Σ)
这是我的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