2017-02-10 2 views
0

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)) 

私は誤解かもしれないが、私の意図は、これらのサンプルのためにサンプリングするdist1dist2の事後のためであり、決定論的変数に供給される。事後確率予測は観測された確率変数に対してのみ可能ですか?

それはdist2pymc3.sampling.sample_ppcを使用して他の確率変数から事後予測サンプルを取得するには簡単ですが、私のモデルの価値の大半はval1の状態から派生しval2、それらのサンプル与えられています。

pm.Deterministic(.)th.TensorVariableを返すように見えるという問題が発生します。だから、これが呼び出されたとき:

ppc = pm.sample_ppc(_trace, vars=[val1, val2])["val1", "val2"] 

...とpymc3.samplingpymc3試みのコードブロックを:

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にグラフがあるという事実を考えると馬鹿げているようだ。

答えて

0

はい、私は.sample_ppcの目的を誤解していました。トレースにサンプルが含まれているため、監視されていない変数にはこの変数は必要ありません。観測された変数は、そのデータが観測されるためにサンプリングされないので、サンプルを生成するにはsample_ppcが必要です。

つまり、pm.Deterministic変数のサンプルをトレースから収集できます。

関連する問題