21

pymc が Metropolis-Hastings アルゴリズムを実装して、関心のあるパラメーターの事後密度からサンプルを取得する場合、マルコフ連鎖の次の状態に移動するかどうかを決定するために、事後密度に比例する何かを評価できなければなりません。指定されたすべてのパラメーター値の密度。

事後密度は、観測データに事前密度を掛けたものに基づく尤度関数に比例します。

これらのそれぞれは、pymc 内でどのように表されますか? モデルオブジェクトからこれらの各量をどのように計算するのでしょうか?

誰かが私にアプローチの高レベルの説明を与えてくれるか、それを見つけることができる場所を教えてくれるのだろうか.

4

1 に答える 1

3

事前確率を表すには、次の 2 つの主要な属性を持つ Stochastic クラスのインスタンスが必要です。

value : the variable's current value
logp : the log probability of the variable's current value given the values of its parents

使用しているディストリビューションの名前で事前確率を初期化できます。

可能性を表すには、いわゆる Data Stochastic が必要です。つまり、observedフラグが に設定されているクラス Stochastic のインスタンスですTrue。この変数の値は変更できず、サンプリングされません。observedここでも、使用している分布の名前で尤度を初期化できます (ただし、フラグをに設定することを忘れないでくださいTrue)。

次の設定があるとします。

import pymc as pm
import numpy as np
import theano.tensor as t

x = np.array([1,2,3,4,5,6])
y = np.array([0,1,0,1,1,1])

以下を使用して単純なロジスティック回帰を実行できます。

with pm.Model() as model:
    #Priors
    b0 = pm.Normal("b0", mu=0, tau=1e-6)
    b1 = pm.Normal("b1", mu=0, tau=1e-6)
    #Likelihood
    z = b0 + b1 * x
    yhat = pm.Bernoulli("yhat", 1 / (1 + t.exp(-z)), observed=y)
    # Sample from the posterior
    trace = pm.sample(10000, pm.Metropolis())

上記のほとんどは、Chris Fonnesbeck の iPython ノートブック (こちら) からのものです。

于 2014-03-28T03:19:17.787 に答える