我正在尝试使用pyro来指定贝叶斯网络。我有一个连续的子节点D,它有三个离散节点是父节点,每个节点都有10个可能的状态:
因此,我首先将我的离散节点定义为:
import torch
import pyro
import pyro.distributions as dist
def model(data):
A = pyro.sample("A", dist.Dirichlet(torch.ones(10)))
B = pyro.sample("B", dist.Dirichlet(torch.ones(10)))
C = pyro.sample("C", dist.Dirichlet(torch.ones(10)))现在,正如我所理解的,我需要定义P(D|A, B, C)。我想将其建模为正态分布,但不确定如何进行这种调节。我的计划是先对这个分布参数进行先验分析,然后使用MCMC或HMC来估计后验分布,并学习模型参数。
但是,不确定如何继续进行模型定义。
发布于 2021-10-06 21:17:02
关于pyro的好处是模型定义是非常节奏性的。底层的PyTorch机器可以跟踪您的依赖关系。
您只需要使用示例A、B和C,并计算条件p(D|A,B,C)的参数。
def cond_mean(a, b, c):
return # use a,b,c to compute mean
def cond_scale(a, b, c):
return # use a,b,c to compute scale
def model(data):
A = pyro.sample("A", dist.Dirichlet(torch.ones(10)))
B = pyro.sample("B", dist.Dirichlet(torch.ones(10)))
C = pyro.sample("C", dist.Dirichlet(torch.ones(10)))
D = pyro.sample("D", dist.Normal(loc=cond_mean(A, B, C), scale=cond_scale(A, B, C)
...https://stackoverflow.com/questions/69472294
复制相似问题