首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用具有高斯先验的emcee

使用具有高斯先验的emcee
EN

Stack Overflow用户
提问于 2018-04-13 14:00:02
回答 2查看 3.1K关注 0票数 3

我正在尝试使用高斯优先使用emcee,但似乎不能完全弄清楚。基本上我想替换掉

代码语言:javascript
复制
def lnprior(theta):
     a, b, c = theta
     if 1.0 < a < 2.0 and 1.0 < b < 2.0 and 1.0 < c < 2.0:
        return 0.0
     return -np.inf

从具有µ和sigma的高斯分布中采样'a‘。我该怎么做呢?是像这样吗?

代码语言:javascript
复制
def lnprior(theta):
     a, b, c = theta
     if 1.0 < b < 2.0 and 1.0 < c < 2.0:
        return 0.0
     if 0<a<20:
         mu=10
         sigma=1
         s=np.random.normal(mu, sigma)
         return s
     return -np.inf

这看起来不太对吧?

EN

回答 2

Stack Overflow用户

发布于 2018-04-24 21:32:53

下面的方法似乎对我很有效

代码语言:javascript
复制
def lnprior(theta):
    a, b, c = theta
    #flat priors on b, c
    if not 1.0 < b < 2.0 and 1.0 < c < 2.0:
        return -np.inf
    #gaussian prior on a
    mu = 10
    sigma = 1
    return np.log(1.0/(np.sqrt(2*np.pi)*sigma))-0.5*(a-mu)**2/sigma**2
票数 6
EN

Stack Overflow用户

发布于 2018-05-11 00:46:53

previous answer by isinwe是正确的答案,我只会尝试解释为什么它是正确的。

先前的角色

在问题中有一个一致先验的示例(实际上类似于docs中的示例),如果theta的值在某些约束内,则返回0,否则返回负无穷大。

这是正确的,因为此先验将用于计算后验概率:

然而,由于这种概率往往是非常小的数字,最好避免太多的舍入误差来处理它们的对数,这意味着:

单变量先验

因此,统一的先验如下:

如果满足条件,则始终为常量,否则为零。由于这里只有比例是相关的,归一化常数可以忽略不计。因此,当采用对数时,当满足条件时,对数将为零,否则将为负无穷大。

多个前科

在多个先验的情况下,它们被相乘,一旦取对数,它就变成一个和。也就是说,在类似示例的一致先验的情况下,除非同时满足这两个条件,否则先验的对数将为零,-inf+0=-inf。

在更复杂的先验组合的情况下,我们需要回到对先验的正确解释,即总和。因此,在手头的情况下,先验必须返回三个先验对数中每个先验对数的和,这正是在isinwe's answer中以一种有效的方式完成的,这避免了如果均匀先验的贡献已经是-inf时计算高斯。

作为一般规则,最好首先检查一致先验,如果条件不满足,则返回-inf,如果满足条件,则评估所有其他更复杂的先验并返回它们的和(因为一致先验的贡献可以近似为零)。

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

https://stackoverflow.com/questions/49810234

复制
相关文章

相似问题

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