4

収束を確認するには、さまざまなパラメーターで MCMC をさまざまな時間に実行する必要があります。だから私はトレースを保存することに決めたので、(比較目的で)知る必要があるときに

pymc.MCMC (iter = 10000, burn = 1000, thin = 10)

再実行する必要はありません。(多くの時間がかかります(パラメータのさまざまな値に対して同じことをしなければなりません))。

私は解決策を見つけました

m = MCMC([tau, rv], db='pickle', dbname='10000iter1000burn.pickle')
m.sample(iter = 10000, burn = 5000, thin = 10)
m.db.close()

したがって、トレースは10000iter1000burn.pickleという名前のデータベースに保存されます

さて、トレースをロードするには、次のようにします

db = pymc.database.pickle.load('10000iter5000burn.pickle')

実行するprint db.trace('tau')[:]と同じ出力が得られますが、図をプロットしたり、他の情報を取得したりしたい場合は失敗します

plot(db)  #error

plot() は少なくとも 2 つの引数 (1 つ指定) を取ります が、plot(m) を実行すると (サンプラーを再度実行したときの最初のケース)、正常に動作します。

同様にdb.tau.summary()、エラー'Trace' object has no attribute 'summary' が表示 されます。m.tau.summary()

同じことが当てはまりますdb.logp

私はこの分野の初心者です。構文のどこかに間違いがある場合は、親切に修正してください。図を再プロットして、mcmc を再度実行せずにモデルの対数確率を取得できる他の方法があれば、喜んでお知らせします。

4

1 に答える 1

4

データベース バックエンドを plot 関数に渡すことはできません。(1) 元のノード/確率 (2) トレース オブジェクト (3) pymc ノード/確率の辞書、または (4) 生の出力のいずれかを渡すことができます。

于 2014-05-28T21:45:09.077 に答える