【发布时间】:2019-01-23 21:26:40
【问题描述】:
我有一个具有统一先验的 6 个参数的模型:
parameter1 = pm.Uniform('parameter1',0.01,1)
parameter2 = pm.Uniform('parameter2',0,2)
parameter3 = pm.DiscreteUniform('parameter3',1,50)
parameter4 = pm.Uniform('parameter4',0,1.75)
parameter5 = pm.Uniform('parameter5', 0.005, 0.25)
parameter6 = pm.Uniform('parameter6', 0.005, 0.15)
我有一个返回对数似然值的自定义似然函数:
@pm.potential
def log_l(experiment=experiment,parameter1=parameter1,parameter2=parameter2,parameter3=parameter3,parameter4=parameter4,parameter5=parameter5,parameter6=parameter6):
if parameter5<parameter4:
return -np.inf
parameters=[parameter1, parameter2, parameter3]
log_l=calculate_probability(parameters, t_m, tol, n_integration, parameter4, parameter5, parameter6, experiment.decon_all[freq,:,:])
return log_l
calculate_probability 是一个 my 函数,它在给定参数值和观察数据的情况下返回此模型的对数似然度。
由于某些原因,当 MCMC 采样时:
model = pm.MCMC([parameter1,parameter2,parameter3,parameter4,parameter5,parameter6,log_l])
model.sample(100)
并且程序满足 if 条件 (parameter5<parameter4) 我收到此错误:
pymc.Node.ZeroProbability: Potential log_l forbids its parents' current values
我想知道是否有人知道我做错了什么?
【问题讨论】:
-
这里的问题是:你为什么用
pymc而不是pymc3? -
我首先尝试使用 pymc3,但是在采样过程中我需要所有参数值都是浮点数或整数,以便 calculate_probability 函数起作用,而且我不知道如何将 theano 对象转换为浮点数。您是否建议这种类型的模型在 pymc3 中更容易处理?
-
是的,
pymc3应该更容易。也许这个网站可以帮助你 discourse.pymc.io 这个:“我不知道如何将 theano 对象转换为浮点数”
标签: python pymc log-likelihood