pymc.MvNormal#

class pymc.MvNormal(name, *args, rng=None, dims=None, initval=None, observed=None, total_size=None, transform=UNSET, **kwargs)[源代码]#

多元正态对数似然。

\[f(x \mid \pi, T) = \frac{|T|^{1/2}}{(2\pi)^{k/2}} \exp\left\{ -\frac{1}{2} (x-\mu)^{\prime} T (x-\mu) \right\}\]

支持

\(x \in \mathbb{R}^k\)

均值

\(\mu\)

方差

\(T^{-1}\)

参数:
mu : 类似张量floattensor_like of float

均值向量。

cov : 类似张量float, 可选tensor_like 的 python:float, 可选

协方差矩阵。cov、tau 或 chol 中必须且只能指定一个。

tau : 类似张量float, 可选tensor_like 的 python:float, 可选

精度矩阵。cov、tau 或 chol 中必须且只能有一个。

chol : 类似张量float, 可选tensor_like 的 python:float, 可选

协方差矩阵的 Cholesky 分解。cov、tau 或 chol 中必须且只能有一个。

lower: bool, 默认=True

chol 是否为下三角三对角Cholesky因子。

示例

为给定的协方差矩阵定义一个多元正态变量:

cov = np.array([[1., 0.5], [0.5, 2]])
mu = np.zeros(2)
vals = pm.MvNormal('vals', mu=mu, cov=cov, shape=(5, 2))

大多数情况下,指定协方差的Cholesky因子是更好的选择。例如,我们可以这样拟合一个多元结果(有关此的更多信息,请参阅 LKJCholeskyCov 的文档字符串):

mu = np.zeros(3)
true_cov = np.array([[1.0, 0.5, 0.1],
                     [0.5, 2.0, 0.2],
                     [0.1, 0.2, 1.0]])
data = np.random.multivariate_normal(mu, true_cov, 10)

sd_dist = pm.Exponential.dist(1.0, shape=3)
chol, corr, stds = pm.LKJCholeskyCov('chol_cov', n=3, eta=2,
    sd_dist=sd_dist, compute_corr=True)
vals = pm.MvNormal('vals', mu=mu, chol=chol, observed=data)

对于未观测到的值,使用非中心参数化可能会更好:

sd_dist = pm.Exponential.dist(1.0, shape=3)
chol, _, _ = pm.LKJCholeskyCov('chol_cov', n=3, eta=2,
    sd_dist=sd_dist, compute_corr=True)
vals_raw = pm.Normal('vals_raw', mu=0, sigma=1, shape=(5, 3))
vals = pm.Deterministic('vals', pt.dot(chol, vals_raw.T).T)

方法

MvNormal.dist([mu, cov, tau, chol, lower])

创建一个与 cls 分布相对应的张量变量。