tikz-bayesnet 入門
tikz-bayesnet 入門
PyMC のようなベイズモデリングをやりだすと、ベイズモデルの plate notation を作図したくなります。
作図ツールとしては、LaTeX 経由になりますが、tikz-bayesnet というライブラリが便利です。
以下は Wikipedia から引用した LDA モデルの plate notation です。この図を書くことを目標にします。(なお、LaTeX 環境が手元にあることを前提にしています。)
ソースコードは下記のようになります。
¥documentclass[10pt,dvipdfm]{article}
¥usepackage{tikz}
¥usetikzlibrary{bayesnet}
¥begin{document}
¥begin{tikzpicture}
% Nodes
¥node[latent](alpha){$¥alpha$};
¥node[latent, right = of alpha](theta){$¥theta$};
¥node[latent, right = of theta](z){$z$};
¥node[obs, right = of z](w){$w$};
¥node[latent, above = of z](beta){$¥beta$};
% edge
¥edge{alpha}{theta};
¥edge{theta}{z};
¥edge{z, beta}{w};
% Plates
¥plate{p1}{(z)(w)}{$N$};
¥plate{p2}{(theta)(p1)}{$M$};
¥end{tikzpicture}
¥end{document}
最初の ¥documentclass[10pt,dvipdfm]{article}
は latex で PDF を作成するときのいつものやつです。
次の
¥usepackage{tikz}
¥usetikzlibrary{bayesnet}
は、必要なライブラリを呼び出しています。
次の ¥begin{document}
と最後の ¥end{document}
は latex の文章を括ってる部分です。
作図の本体は ¥begin{tikzpicture}
と ¥end{tikzpicture}
に囲まれた部分です。
まず node を定義します。node の記述方法は
¥node{名前}[オプション]{表示内容};
の形式です。オプションには latent
(白丸:未観測の変数)と、obs
(黒丸:観測された変数)の区別、他にも const
, det
などがあるようです。
位置指定には left
, right
, above
などの他に yshift=0.8cm
のように細かく数値指定も出来ます。
次に node 間の edge を指定します。
¥edge{入力リスト}{出力};
みたいに指定します。
最後に plate を指定します。
¥plate{名前}{(アイテム1)(アイテム2)...}{繰り返し要素};
とか書きます。
サンプルのようにネストした plate の場合、先に内側の plate に名前をつけて定義し、外側の plate に内側の plate を含めるようにします。
こんな感じで簡単に plate notation が作図できます。
Discussion