ディリクレ分布に関するメモ (1)

  • ????????????????????

【ディリクレ分布シリーズ】

ディリクレ分布 (Dirichlet distribution) について。非常に有用な分布なのですが、まじめに計算をしたことがなかったので計算をしてみました。計算はベータ関数、ガンマ関数のオンパレードです。まずはディリクレ分布の諸性質から。

ディリクレ分布とは

  • d 次元のベクトル値の確率変数(\(d\ge2\))でベクトルの成分の合計が1となるような分布。また、各ベクトル成分 \(x_i\) は非負。
  • 合計が1になるという制約条件から、実質は\begin{align*}\Delta=\{x\in\mathbb R^d | x_1+x_2+\cdots+x_d=1, x_i>0\}\end{align*}上に定義される \(d-1\) 次元の確率分布。ここでは \(x_d=1-x_1-\cdots-x_{d-1}\) として扱う。
  • この性質から、ディリクレ分布からのランダムなサンプルは有限個の値を取る確率分布と解釈できる。
  • 密度関数がパラメータ \(\alpha\) (d 次元のベクトル)を使って以下のように定義される:\begin{align*}f(x)\propto \prod_{i=1}^d x_i^{\alpha_i-1}\end{align*}(正規化定数は後で計算します)以降、表記の簡略化のために
    \begin{align*}
    &\alpha_{i:j}=\sum_{k=i}^j\alpha_k\\
    &A=\alpha_{1:d}
    \end{align*}
    という表記を使う。
  • \(Dir(\alpha)\) とか表記する。
  • 平均は\begin{align*}E[X]=\frac\alpha{A}\end{align*}
  • 分散は\begin{align*}V[X_i]=\frac{\alpha_i(A-\alpha_i)}{A^2(A+1)}\end{align*}
  • 共分散は\begin{align*}Cov[X_i,X_j]=\frac{-\alpha_i\alpha_j}{A^2(A+1)}\qquad(i\ne j)\end{align*}
  • ベータ分布の一般化(多次元化、多変量ベータ分布); ベータ分布は \(d=2\) の時に対応する
  • 多項分布をディリクレ分布で混合するとポリア多項分布が得られる
  • 多項分布と共役
  • 独立な d 個のガンマ分布に従う乱数を正規化することで、d 次元のディリクレ分布に従う乱数を容易に発生させることが可能

正規化定数の計算

上では正規化定数を省略して
\begin{align*}f(x)\propto \prod_{i=1}^d x_i^{\alpha_i-1}\end{align*}
としました。計算してみましょう(フォントが潰れて見にくい場合はブラウザの表示を拡大してみてください)。上式右辺を定義域で積分します。
\begin{align*}
&B(\alpha)=\int_\Delta dx \bigg\{\prod_{i=1}^{d-1}x_i^{\alpha_i-1}\bigg\}(1-x_1-\cdots-x_{d-1})^{\alpha_d-1}\\
&=\int_0^1dx_1 x_1^{\alpha_1-1}
\int_0^{1-x_1}\hspace{-13pt}dx_2\;x_2^{\alpha_2-1}\cdots\\
&\hspace{20pt}\int_0^{1-x_1-x_2-\cdots-x_{d-2}}\hspace{-30pt}dx_{d-1} x_{d-1}^{\alpha_{d-1}-1}(1-x_1-\cdots-x_{d-1})^{\alpha_d-1}
\end{align*}
ややこしいですが…とりあえず次の式を使うと計算が楽になります。
\begin{align*}
&\int_0^pdx\;x^{\alpha-1}(p-x)^{\beta-1}=p^{\alpha+\beta-1}B(\alpha,\beta)\\
&B(\alpha,\beta)=\frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)}
\end{align*}
ここで \(B, \Gamma\) はそれぞれ、ベータ関数(wikipedia:ベータ関数)、ガンマ関数(wikipedia:ガンマ関数)です。

\(B(\alpha)\) の最後の積分(\(x_{d-1}\) について)を計算してみます。上の公式を使うと次のように計算できます。
\begin{align*}
&\int_0^{1-x_1-x_2-\cdots-x_{d-2}}\hspace{-30pt}dx_{d-1} x_{d-1}^{\alpha_{d-1}-1}(1-x_1-\cdots-x_{d-1})^{\alpha_d-1}\\
&=(1-x_1-\cdots-x_{d-2})^{\alpha_{d-1}+\alpha_d-1}B(\alpha_{d-1},\alpha_d)
\end{align*}
この結果を次の \(x_{d-2}\) についての積分に代入すると
\begin{align*}
&\int_0^{1-x_1-x_2-\cdots-x_{d-3}}\hspace{-30pt}dx_{d-2} x_{d-2}^{\alpha_{d-2}-1}(1-x_1-\cdots-x_{d-2})^{\alpha_d}B(\alpha_{d-1},\alpha_d)\\
&=(1-x_1-\cdots-x_{d-3})^{\alpha_{d-2:d}-1}B(\alpha_{d-2},\alpha_{d-1:d})B(\alpha_{d-1},\alpha_d)
\end{align*}
これを繰り返すことで正規化定数は
\begin{align*}
B(\alpha)=B(\alpha_1,\alpha_{2:d})B(\alpha_2,\alpha_{3:d})\cdots B(\alpha_{d-1},\alpha_d)
\end{align*}
となることがわかります。上で挙げたベータ関数とガンマ関数の関係式を使うと
\begin{align*}B(\alpha)=\frac{\prod_{i=1}^d\Gamma(\alpha_i)}{\Gamma(A)}\end{align*}
となることがわかりました。これがディリクレ分布の正規化定数です。

まとめると

ディリクレ分布の密度関数は以下のように定義されます:
\begin{align*}
&f(x)=\frac1{B(\alpha)}\prod_{i=1}^d x_i^{\alpha_i-1}\qquad x\in \Delta\\
&\text{where} \qquad B(\alpha)=\frac{\prod_{i=1}^d\Gamma(\alpha_i)}{\Gamma(A)}
\end{align*}

平均、分散、共分散の計算、その他のトピックについては続くエントリーで書きます。

(どうでもいいことですが、この計算をしてみて初めてベータ関数の有用さがわかった気がします。)

はてなブックマーク - ディリクレ分布に関するメモ (1)
Pocket