私はよくある問題にぶつかります。私はしばしば、訓練(すなわち、実際にパラメータの推論を実行する)と評価(すなわち、予測を生成するために推論されたパラメータを使用する)の2つのモードでpymc3を使いたいと思う。pymc3の推定パラメータからの予測の生成
一般的に、私は、ポイントベースの推定だけでなく、ベイジアンフレームワークのメリットの一部でもあります。トレーニングデータが固定されている場合、これは通常、類似した形式のシミュレート変数を観測変数に追加することによって行われます。たとえば、
from pymc3 import *
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=2)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
Y_sim = Normal('Y_sim', mu=mu, sd=sigma, shape=len(X1))
start = find_MAP()
step = NUTS(scaling=start)
trace = sample(2000, step, start=start)
データが変更されたらどうなりますか?新しいデータに基づいて予測を生成したいが、推論を繰り返し実行する必要はないとします。理想的には、私はpredict_posterior(X1_new, X2_new, 'Y_sim', trace=trace)
またはpredict_point(X1_new, X2_new, 'Y_sim', vals=trace[-1])
のような関数を持っていて、単にtheano計算グラフを通して新しいデータを実行するでしょう。
私の質問の一部は、pymc3がtheano計算グラフをどのように実装するかと関係していると思います。私は関数model.Y_sim.eval
が欲しいものに似ているように見えましたが、それは入力としてY_sim
を必要とし、あなたがそれを与えるものを返すようです。
私はこのプロセスが非常に一般的だと思いますが、私はそれを行う方法を見つけることができないようです。どんな助けでも大歓迎です。 (これはpymc2でこれを行うためのハックを持っているので、pymc3ではtheanoのために難しいです。)
正常に動作しているように見える、後部予測分布からのサンプリングについて話しています。あなたが「新しいデータに基づいて」ということを正確には確信していない。この分析の後任者を、追加のデータに基づく推論の前任者として使うことについて話していますか? –
@ChrisFonnesbeckそれは、私たちが得るposteriorsはトレースの形であり、例文の構文でpriorを指定するためにそれらを使用することはできないので、私が興味を持っているものです。 – recluze
pymc3のgitterページのtwieckiは私が直面している問題に対処していると思われるこの[page](http://pymc-devs.github.io/pymc3/posterior_predictive/)を私に指摘しました。私は何が行われたのか理解するのに時間を費やさなければならないが、それは有望に見える。 – santon