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 : 类似张量 的
float
tensor_like offloat
均值向量。
- 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因子。
- mu : 类似张量 的
示例
为给定的协方差矩阵定义一个多元正态变量:
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 分布相对应的张量变量。