python - 理解 Numpy 的 `multivariate_normal` 方法
问题描述
0
我希望从具有均值和极低标准差 ( 0.001
)的多元高斯分布中生成样本。但是当我绘制结果样本时,我对它们的范围感到困惑。
如果我们查看从标准高斯分布生成的随机样本,它看起来不错。很大比例的样本位于两个轴上的 (-1, +1) 边界内(理想应该是 66%?)。此外,所有样本都在 (-3, +3) 的范围内,这看起来很好。
mean = np.array([0., 0.])
cov1 = np.array([[1., 0.], [0., 1.]])
size = 100
vals1 = np.random.multivariate_normal(mean, cov1, size)
plt.scatter(vals1[:, 0], vals1[:, 1])
现在,当我将标准偏差减小到 时0.001
,我希望样本在范围内(-0.003, 0.003)
,但它们要高一个数量级。我看到他们在范围内(-0.06, 0.06)
。
cov2 = np.array([[0.001, 0.], [0., 0.001]])
vals2 = np.random.multivariate_normal(mean, cov2, size)
plt.scatter(vals2[:, 0], vals2[:, 1])
我想我从多元高斯解释样本范围的方式有问题。谁能帮我理解这些结果?谢谢。
解决方案
如果协方差矩阵是对角的,则其对角项是每个变量的方差(σ^2)。所以当你有
cov2 = np.array([[0.001, 0.], [0., 0.001]])
您实际上是在选择每个变量中的标准偏差 (σ) 为 sqrt(0.001) = 0.03162277660168379。