#ギブスサンプリングについて
参考:http://www.mit.edu/~ilkery/papers/GibbsSampling.pdf
間違っていたら教えていただけると幸いです.
##概要
###ギブスサンプリングを行う目的
ベイズ推定で事後分布を推定する際に,周辺分布の算出に積分が必要になる.
しかし,積分するのが難しいことがあるため,周辺分布のサンプリングをギブスサンプリングによって行う.
→ギブスサンプリングというサンプリング手法を用いれば周辺分布のサンプルを近似でき,周辺分布の性質を再現できる!
つまり,ギブスサンプリングは「分布から$N$個サンプリングすれば,分布の特性がわかる」というマルコフ連鎖モンテカルロ法の考え方をベースにしている.
この時周辺分布からどうやってサンプリングをするのか?
→ここでギブスサンプリングの出番
##説明
一つの確率変数を選択し,それ以外の確率変数を固定し,選択した確率変数の値をサンプリングする.これを繰り返し確率変数を変更しながら行うことによって,最終的に周辺分布のサンプリングを行った場合の同じようなサンプリングが行えるようになる.
##例を使ったアルゴリズムの説明
例を用いてギブスサンプリングを説明すると...
確率変数$X_1,X_2,X_3$があるとする.(サイコロでのイメージ)
($X_1=1,2,3,4,5,6$,$X_2=1,2,3,4,5,6$,$X_3=1,2,3,4,5,6$)
この時,いろんな組み合わせの$X_1,X_2,X_3$のデータがあるとする.
STEP1
まず$x_1^{(0)},x_2^{(0)},x_3^{(0)}$の初期値を決める.(多くの場合,事前分布より定める)
今回はそれぞれ3,4,5とする
STEP2
以下の式よりサンプリングを繰り返す
$x_1^{(i)}\sim p(X_1=x_1|X_2=x_2^{(i-1)},X_3=x_3^{(i-1)})$
$x_2^{(i)}\sim p(X_2=x_2|X_1=x_1^{(i)},X_3=x_3^{(i-1)})$
$x_3^{(i)}\sim p(X_3=x_3|X_1=x_1^{(i)},X_2=x_2^{(i)})$
例ではまず以下のよりサンプリングを行う.
$x_1^{(1)}\sim p(X_1=x_1|X_2=4,X_3=5)$
→この時,$X_2=4,X_3=5$の場合,$X_1$が1から6の中でどの値になりそうかの確率を知っているとする.サイコロである場合は全て$1/6$
実際のデータでも,$X_2=4,X_3=5$の時,$X_1$が取る1から6の値は大体それぞれ$1/6$の確率で出現している(はず).サンプリングの結果$x_1^1=2$であったとする.
次に以下よりサンプリングを行う.
$x_2^{(1)}\sim p(X_2=x_2|X_1=2,X_3=5)$
サンプリングの結果$x_2^{(1)}=1$であったとする.
また,次のサンプリングを行う.
$x_3^{(1)}\sim p(X_3=x_3|X_1=2,X_2=1)$
以上の$x_1,x_2,x_3$それぞれをサンプリングする操作を繰り返していくことによって,$x_1,x_2,x_3$のパターンを多く取得できる.
ただし,サンプリング開始直後のサンプリングは最終的に得たい周辺分布のサンプルを表していないことが多いため,ある程度サンプリングが安定してきてからのサンプルを用いるのが良い.