EMアルゴリズムによる混合分布のパラメーター推定の解析計算&実装例 from 「Rによるモンテカルロ法入門」
問題設定
R言語の書籍「Rによるモンテカルロ法入門」
のEMアルゴリズムに関連した「練習問題5.14」をpthonの練習がてらEMアルゴリズム構築までの数式もメモりながら解いてみたというお話。問題設定としては
という混合分布(分布から確率
、分布
から確率
でサンプリング)から
個サンプリングした状況を考えて、このパラメーター
をEMアルゴリズムで推定するというもの。機械学習の分野でいう所の「教師なし2クラス分類」に該当する(たぶん)。
グラフを使ってもうちょっとちゃんと説明しておくと、実際に観察された青い棒グラフで示されているデータは赤色のグラフで示されている
からのサンプルなのか、それとも緑色のグラフで示されている
からのサンプルなのかを識別するための閾値的な量になっている
というパラメーターを推定してましょうと、そして、既存のデータは
のどちらの分布から来た可能性が高いのかを判断しましょうとそういう問題。
(縦軸:確率密度・横軸:確率変数の実現値)
隠れ変数の導入
確率変数の実現値
のみを取得した状況下ではこの
が
のどちらの分布からのサンプルかは判断できないので、それを表わすために以下のような確率変数
を各
に対応させる形で新たに導入する。
ただし
(確率変数
に測度を付与)
(確率変数
の分布を指定)
とする。このは実際には観測されないので欠損データor隠れ変数or潜在変数等と呼ばれる。以下
等と添え字
なしに書いた場合、全確率変数orデータの集合を表しているものとする。つまり
ということである。
完全データ尤度の計算
この時仮に確率変数の実現値
も取得できたと仮定し、その時の尤度を完全データ尤度と呼ぶ事にし、計算してやると
ここで
であるので(を代入してみれば明らか)代入すると
と表わすことができる*1。
(ここが設問aの答え)
EMアルゴリズムの構築
というパラメーターの推定を最尤推定の枠組みで考えた場合、最大化すべき量は
であるが、ベイズの定理を用いて
となるので、両辺を取って確率を尤度としてみてやると
とする事が出来る。さらに両辺にを掛けて
で積分してやると左辺は
に依存しないのでそのままになり
とすることができる。EMアルゴリズムはこの右辺第一項を最大化するアルゴリズムである*2。この手法を使うご利益としては、通常の最尤推定で扱う尤度関数が解析的に扱いにくい場合に隠れ変数を導入する事で尤度関数の計算が解析的に出来るケースへ還元することが出来るといったメリットがある。
EMアルゴリズムのその手順を書くと
1:初期値
を選択,
と設定
2:Eステップ
を計算する。期待値はとして確率変数Zに対して取る
3:Mステップ
とする
4:2〜3のステップを指定したレベルに収束するまで繰り返す。
と記述されるものである。数値計算を使わないで解析的に各ステップを評価する場合、あらかじめ
...(A)
...(B)
の計算しておかなければならないのでやる。
(A)の計算
(が1か0しか取らないという事実より)
...(C)
ここでベイズの定理から
なので
...(D)
従って(D)を(C)に代入する事で、(C)は
となる。
...(E)
(ここが設問bの答え)
(B)の計算
なので(B)である
を計算するためには(E)を最大化するような
を見つければよい。従って(E)の右辺を
で偏微分し、それが0となるような
を探す。
このに関する更新の式がEMアルゴリズムでいう「3:Mステップ」に対応する。今回の場合、「2:Eステップ」は式(A)の計算として実行してはいるものの、実際のプログラムの中では必要ない。
EMアルゴリズムの実装
あとは上で計算した数式をコードに落とし込むだけとなって、ここでは参照している練習問題5.14に合わせて
(標準正規分布の確率密度関数)
(標準正規分布に設定)
(平均2・標準偏差2の正規分布に設定)
と設定した。よくある混合ガウシアンに対応。真のパラメータへの収束の様子をグラフにしてみると
(縦軸:パラメーターの推定値・横軸:EMアルゴリズムのループ回数)
という感じでだいたい10回もE-Mステップを繰り返せば収束としてはよい感じか。あと思った以上にサンプルが少なくて(25)もちゃんと動くんだなということがわかった。同条件で何度かシミュレーションを実行すると推定値自体は大体0.1のオーダーでばらついてしまうのでできるならもっとサンプル数を増やしておくべき所ではあるという結論。
(ここが設問cの答え)
↓コードは以下。コメントアウトしている行を動かすとサンプルデータの分布と真の分布の重ね合わせが表示される。
〜参考〜
- 混合ガウスモデルとEM - 人工知能に関する断創録(説明が丁寧)
- EMアルゴリズムで混合ガウス分布 - きちめも(図が綺麗)
- EM アルゴリズム実装(勉強用) - Mi manca qualche giovedi`?(サイボウズラボ・中谷氏の丁寧な解説)
- EMアルゴリズム答え合わせ - 西尾泰和のはてなダイアリー(同じくサイボウズラボ・西尾氏のR&python比較)
- 手短にまとまっていてgood