Probabilistic Programming: Bernoulli trial with Scipy & PyMC3

Ref: Baysian Analysis with Python by Osvaldo Martin
———————————-
Bernoulli trial:Coin-flipping 5回の施行でコインの表が出る確率を40%としたとき、Scipyをimportして、

outputの一例は、

outputを繰り返すと、

となったりもする。そこで乱数を固定して、出力も一定とする。

Bernoulli trialのBayes Modelは、
事前分布をβ関数:
θ 〜 Beta(α, β)
尤度を二項分布:
y 〜 Bin(n=5, p=θ)
とすれば、事後分布〜y・θ

PyMC3をインポートして、

と表せる。PyMC3は、Theanoを利用して、PythonコードをC++に変換するため、高速演算が可能である。
次に、最大事後確率を初期値、find_MAP()で求めて、Metropolis-Hesting法をサンプリング法として指定し、サンプル数1000を指定して、トレース変数へ収める。

Burn-inを100として、θをトレースする。

2 chain実行されたようで、
左 KDE:カーネル密度推定(実際のθ=0.4をライン表示)と、右:M−H法でのサンプリングの過程は以下の通り。