微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用相同但反向的均值向量和协方差时,为什么两个多正态绘制不匹配?

如何解决使用相同但反向的均值向量和协方差时,为什么两个多正态绘制不匹配?

我希望了解为什么当协方差为指数时,具有相同但重新排序的均值向量(以及正确重新排序的协方差向量)的多重正态分布中的两个绘制不同。

这个 MWE 应该比那个更好解释:

import numpy as np
np.random.seed(10)
x0 = [1,2,3]
y0 = np.diag([0.3,0.5,0.7])
z0 = np.random.multivariate_normal(x0,y0)

np.random.seed(10)
x1 = [3,1]
y1 = np.diag([0.7,0.3])
z1 = np.random.multivariate_normal(x1,y1)

print (np.allclose(z0,np.flip(z1))) # True,as expeceted

np.random.seed(10)
z0 = np.random.multivariate_normal(x0,np.exp(y0))
np.random.seed(10)
z1 = np.random.multivariate_normal(x1,np.exp(y1))

# these are unexpectedly different
print (z0,z1)
print (z0.mean(),z1.mean()) 

这种差异是数学上的,还是数字上的,还是完全不同的?

解决方法

这似乎与 np.exp() 无关。例如,

np.random.seed(11)
y0 = np.exp(y0)
y0[y0==1] = 0
z0 = np.random.multivariate_normal(x0,y0)
np.random.seed(11)
y1 = np.exp(y1)
y1[y1==1] = 0
z1 = np.random.multivariate_normal(x1,y1)

看起来好像它们是更新随机种子值的行和列之间的随机交互。这意味着如果您有一个包含非零非对角线条目的数组,那么这会导致行和列的非随机决定是不可逆的,这反过来又会在使用随机种子值时形成不同的路径。当我将所有非对角线值固定为零时,就会生成相同的随机种子值。

更新(进一步解释):

这样想,如果我说从 y0 = np.diag([0.7,0.5,0.3]) 中的随机行中选择,那么 SEED 会被咨询和更新,我现在选择说 (0.7,0) 我要求选择一个随机变量,但是两个值为零,因此不咨询 SEED,因为只有一个结果。因此,选择了 0.7,在翻转的情况下也会发生同样的情况。但是,在 y0 = np.exp(np.diag([0.7,0.3])) 的情况下,情况就不同了。在正向和反向设置中,可能会选择 0.7,但在第一种情况下它是 (E0.7,1,1) 而在第二种情况下它是 (1,E0.7 ) 没有保证的第二选择。因此,SEED 将根据这两个不同的向量进行第二次查询和更新,使 SEED 沿着两条完全不同的路径运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。