gpt4 book ai didi

python - 使用 pymc3 定义随机变量和确定性变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:30 25 4
gpt4 key购买 nike

我正在尝试将我自己的随机确定性变量与pymc3一起使用,但是pymc2.3的旧发布配方 解释了我们如何参数化我们的变量不再有效。例如,我尝试使用这种 direct 方法但失败了:

def x_logp(value, x_l, x_h):
if ((value>x_h) or (value<x_l)):
return -np.inf
else:
return -np.log(x_h-x_l+1)
def x_rand(x_l,x_h):
return np.round((x_h-x_l)*np.random.random_sample())+x_l

Xpos=pm.stochastic(logp=x_logp,
doc="X position of halo center ",
observed=False,
trace=True,
name='Xpos',
random=x_rand,
value=25.32,
parents={'x_l':0,'x_h'=500},
dtype=float64,
plot=True,
verbose=0)

我收到以下错误信息:

ERROR: AttributeError: 'module' object has no attribute 'Stochastic' [unknown]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Stochastic'

我想知道如何在不使用装饰器和可用的 pymc 分布的情况下在 pymc3 中定义我自己的先验或可能性?

最佳答案

基本上有两种添加自定义密度的方法:

  1. Theano 表达式(可以使用基于梯度的采样器)

    您可以为此使用 DensityDist,例如: https://github.com/pymc-devs/pymc/blob/master/pymc/examples/custom_dists.py

  2. Blackbox python 函数(仅限非梯度采样器,如 Metropolis 或 Slice)

    Theano 有一个装饰器,您可以像这样使用:


@theano.compile.ops.as_op(itypes=[t.lscalar, t.dscalar, t.dscalar],otypes=[t.dvector])
def rate(switchpoint,early_mean, late_mean):
''' Concatenate Poisson means '''
out = empty(years)
out[:switchpoint] = early_mean
out[switchpoint:] = late_mean
return out

取自这个例子:https://github.com/pymc-devs/pymc/blob/master/pymc/examples/disaster_model_arbitrary_determinisitc.py

确定性可以通过组合随机变量直接完成,或者,如果您希望它们出现在跟踪中,例如使用pm.Determinstic('sum', alpha + beta).

关于python - 使用 pymc3 定义随机变量和确定性变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com