簡體   English   中英

將司儀與高斯先驗一起使用

[英]Using emcee with Gaussian Priors

我嘗試在使用司儀之前先使用高斯,似乎無法完全弄清楚。 基本上我要替換

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

可以從具有mu和sigma的高斯分布中采樣“ a”的東西。 我該怎么做? 像這樣?

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

那似乎不對嗎?

以下方法似乎對我有用

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

isinwe先前的答案是正確的答案,我只會嘗試解釋為什么它是正確的。

先前的角色

在問題中,有一個統一先驗的示例(與docs中的示例非常相似),如果theta的值在某些約束范圍內,則返回0,否則返回無窮大。

這是正確的,因為此先驗將用於計算后驗概率:

后產品

但是,由於此概率往往很小,因此最好避免舍入誤差太大以使用對數,這意味着:

后對數


單變量先驗

因此,統一先驗如下:

先前的例子

如果條件滿足,將始終為常數,否則為零。 由於此處僅比例相關,因此可以忽略歸一化常數。 因此,當采用對數時,當條件滿足時,對數將為零,否則將為負無窮大。


多個先驗

在多個先驗的情況下,它們相乘,一旦取對數,該和就成為和。 也就是說,在像示例一樣的均勻先驗的情況下,除非兩個條件都同時滿足,否則先驗的對數將為零,即-inf + 0 = -inf

在先驗組合更復雜的情況下,我們需要退回到先驗和的正確解釋。 因此,在手頭的情況下,先驗必須返回三個先驗對數中的每一個的對數之和,這正是isinwe答案中以有效方式完成的工作,如果統一先驗的貢獻已經存在,則避免了評估高斯。 -inf

通常,最好先檢查統一的先驗條件,如果條件不成立,則返回-inf;如果條件成立,則對所有其他更復雜的先驗條件求值並返回它們的總和(因為統一先驗可以近似為零)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM