理解 Numpy 的 `multivariate_normal` 方法

Understanding Numpy's `multivariate_normal` method

我希望从具有 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。