首页 > 解决方案 > 理解 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])

来自高斯分布的样本,std=0.001

我想我从多元高斯解释样本范围的方式有问题。谁能帮我理解这些结果?谢谢。

标签: pythonnumpyrandomgaussian

解决方案


如果协方差矩阵是对角的,则其对角项是每个变量的方差(σ^2)。所以当你有

cov2 = np.array([[0.001, 0.], [0., 0.001]])

您实际上是在选择每个变量中的标准偏差 (σ) 为 sqrt(0.001) = 0.03162277660168379。


推荐阅读