統計・確率のお勉強

統計学を中心に色々勉強するブログ

Daftでグラフィカルモデルを作成してみる[Python]

森北出版の「Pythonで体験するベイズ推論」を読み進めていたら、2章で、Pythonのdaftというライブラリを用いて、グラフィカルモデルを作っていたのですが、そのソースコードは載っていなかったので自分で作ってみました。

作ったのは以下のグラフィカルモデル

f:id:doratai:20170605163828p:plain


参考にしたのは次のサイト。
daftでグラフィカルモデル
このサイトがかなり詳しく説明してくれています。

ソースコード

import daft
from matplotlib import rc
rc("font", family="Ricty", size=15)
rc("text", usetex="True")

pgm = daft.PGM(shape=[6,6])

# Nodes
pgm.add_node(daft.Node("alpha", r"$\alpha$", 4, 5)) # 名前 ラベル 座標
pgm.add_node(daft.Node("tau", r"$\tau$", 1, 4.5))
pgm.add_node(daft.Node("lambda_1", r"$\lambda_1$", 3, 4))
pgm.add_node(daft.Node("lambda_2", r"$\lambda_2$", 5, 4))
pgm.add_node(daft.Node("lambda",  r"$\lambda$", 2, 3))
pgm.add_node(daft.Node("obs", "obs", 2, 2, observed=True))

# Edges
pgm.add_edge("alpha", "lambda_1")
pgm.add_edge("alpha", "lambda_2")
pgm.add_edge("tau", "lambda")
pgm.add_edge("lambda_1", "lambda")
pgm.add_edge("lambda_2", "lambda")
pgm.add_edge("lambda", "obs")

pgm.render()
pgm.figure.savefig("pymc_p43.png")