我希望你能给我一些有用的暗示。
我想使用MCMC执行功能最小化
我的函数L(碰巧是-logGaussian)有5个变量。在我的代码中,我遍历第一个(J
)并保持固定,我对其余4个自由变量(a, b, c, r
)进行L采样。
这样做的目的是在多维参数空间中沿一个特定方向构建L的“轮廓”。因此,我对4个自由参数的后验分布不感兴趣,而是对每个J
的4 + 1参数的样本和函数L的对应值感兴趣。
在模型下方,我传递给pymc.MCMC
实例(示意图 - 不是MWE):
def model(J):
a = Uniform('a', lower=0, upper=5)
b = Uniform('b', lower=0, upper=5)
c = Uniform('c', lower=0, upper=5)
r = Uniform('r', lower=0, upper=5)
@deterministic
def loglike(J=J, a=a, b=b, c=c, r=r):
return LL(a, b, J, r, c)
return locals()
此时,为了获得值(J, L, a, b, c, r)
的元组,对于给定范围内的J,我执行以下操作:
for J in J_array:
M = MCMC(model(J))
M.sample(110000, burn=10000, thin=1000)
L_sample = M.trace('loglike')[:]
true_indx = ~np.isnan(L_sample)
L_sample = L_sample[true_indx]
min_indx = np.where( L_sample==L_sample.min() )[0][0]
L = L_sample[min_indx]
for par in ['a', 'b', 'c', 'r']:
exec( "{p}_sample = M.trace('{p}')[:]".format(p=par) )
exec( "{p}_sample = {p}_sample[true_indx]".format(p=par) )
exec( "{p} = {p}_sample[min_indx]".format(p=par) )
我的问题是:我做得对吗?
换句话说:给定我的模型,使用trace
方法,我是否可以访问loglike
函数的值或其后验值?在后一种情况下,如何访问MCMC采样器的简单似然评估?
非常感谢你的帮助。最好的,安德里亚