首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pymc3定义随机确定性变量

用pymc3定义随机确定性变量
EN

Stack Overflow用户
提问于 2014-08-27 16:19:47
回答 1查看 2.7K关注 0票数 1

我试图用stochastic pymc3编写我自己的deterministic变量,但是已经出版的pymc2.3介绍了如何将变量参数化不再有效。例如,我试图使用这种direct方法,但失败了:

代码语言:javascript
复制
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)

我收到以下错误消息:

代码语言:javascript
复制
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'

我想知道如何在不使用装饰器和可用的pymc3发行版的情况下在pymc中定义自己的优先级或可能性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-15 10:37:49

增加自定义密度的方法主要有两种:

  1. Theano表达式(可以使用基于梯度的取样器) 您可以为此使用DensityDist,例如:dists.py
  2. Blackbox python函数(只有非梯度采样器,如大都会,或片) Theano有一个可以像这样使用的装饰器:

代码语言:javascript
复制
@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

摘自本例:determinisitc.py

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25532235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档