TL; DRPyMC3確定的変数の事後予測検査
pm.Deterministic
確率的(確率論的でも確率的なもの)を入力とする変数について、後方予測チェックを行う正しい方法は何ですか?
あまりにも短い。私たちはこのようなpymc3
モデルを持っている
セイを理解していなかった。
import pymc3 as pm
with pm.Model() as model:
# Arbitrary, trainable distributions.
dist1 = pm.Normal("dist1", 0, 1)
dist2 = pm.Normal("dist2", dist1, 1)
# Arbitrary, deterministic theano math.
val1 = pm.Deterministic("val1", arb1(dist2))
# Arbitrary custom likelihood.
cdist = pm.DensityDistribution("cdist", logp(val1), observed=get_data())
# Arbitrary, deterministic theano math.
val2 = pm.Deterministic("val2", arb2(val1))
私は誤解かもしれないが、私の意図は、これらのサンプルのためにサンプリングするdist1
とdist2
の事後のためであり、決定論的変数に供給される。事後確率予測は観測された確率変数に対してのみ可能ですか?
それはdist2
とpymc3.sampling.sample_ppc
を使用して他の確率変数から事後予測サンプルを取得するには簡単ですが、私のモデルの価値の大半はval1
の状態から派生しval2
、それらのサンプル与えられています。
pm.Deterministic(.)
がth.TensorVariable
を返すように見えるという問題が発生します。だから、これが呼び出されたとき:
ppc = pm.sample_ppc(_trace, vars=[val1, val2])["val1", "val2"]
...とpymc3.sampling
でpymc3
試みのコードブロックを:
410 for var in vars:
--> 411 ppc[var.name].append(var.distribution.random(point=param,
412 size=size))
... th.TensorVariable
は明らか.distribution
を持っていないので、それは文句を言います。
したがって、stochasticsの事後検体を決定論によって運ぶ正しい方法は何ですか?確率的事後検体を取り、決定論的値を計算するth.function
を明示的に作成する必要がありますか?それはすでにpymc3
にグラフがあるという事実を考えると馬鹿げているようだ。