マルコフ連鎖モンテカルロ法(MCMC法)について
・MCMC法とは何か?
・MCMC法の種類とPythonモジュール
をまとめてみました。
#0.マルコフ連鎖モンテカルロ法(MCMC法)とは?
マルコフ連鎖を用いることで、モンテカルロ法を強化したものです。
後で詳しく書きますが、
モンテカルロ法は、真にランダムにサンプリングを行うため
・計算コストがかさむ
・精度も向上しない
という課題があります。
そこでマルコフ連鎖モンテカルロ法は、
その課題をマルコフ連鎖を用いることで改善したものです。
#1.モンテカルロ法とは?
"Pythonによるモンテカルロ法入門"
http://aidiary.hatenablog.com/entry/20140620/1403272044
モンテカルロ法が一から丁寧に解説されており、
しかもPythonによる実装付きです。
これだけの分量を試しながら、とても丁寧な解説付きで理論も学べる。
元になった本を僕は持っていますが、こちらのページを読んだ方が
はるかに労力が少ないかつ分かりやすくていいと思います。
モンテカルロ法といっても、結構種類があります。
・逆変換法
・Box-Muller法
・受理棄却法
・重点サンプリング
※原本ではこの後にマルコフ連鎖モンテカルロ法(とメトロポリス法)
の解説があるのですが、このサイトではそこの記載がありません。
#2. マルコフ連鎖とは
ざっくり、時系列において確率的に遷移させるように
行列演算を行うものです。(正確ではありませんが…)
また、確率的に遷移をするオートマトンであるという考え方もできます。
"Introduction to Markov chain : simplified!"
http://www.analyticsvidhya.com/…/07/markov-chain-simplified/
英語ですが、良い記事です。
#3. マルコフ連鎖モンテカルロ法(MCMC法)
##1) MCMC法とは?
モンテカルロ法は、真にランダムにサンプリングを行うため
・計算コストがかさむ
・精度も向上しない
という課題があります。
マルコフ連鎖モンテカルロ法は、
マルコフ連鎖を定常分布としたサンプリングを行うことで、
上記課題を改善した手法です。
##2) MCMC法のアルゴリズム
step1. 初期点を決める
step2. マルコフ連鎖により次のサンプリングを行う分布を決定する
※初期点近辺(今までのサンプリング)内に対象がありそうである
step3. 分布が収束をするまで、step2を繰り返す
#4.Pythonによる実践
##1) はじめてのMCMC (メトロポリス・ヘイスティングス法)
https://tatsyblog.wordpress.com/
ソースコードを読み解くという側からも、
MCMCが理解できるような気がします。
メトロポリス・ヘイスティング法は、最も自然な発想の元で
設計されたオーソドックスな手法です。
確率の低い方へ向かう場合に、一定確率において
定常分布が遷移をしないようストッパーをかけたものです。
※必ず遷移しないようにすると、局所解に落ちやすい
※上のアルゴリズムでは原始的に必ず遷移をさせている
##2) MCMC法の種類
その他、
・ギブスサンプリング法
・ハイブリッドモンテカルロ法
・スライス・サンプリング法
が紹介されていますが、それは↑記事参照で。
##3) Pythonモジュール
↑リンクでは、mcmcモジュールを用いておりますが、
そのほかにもpymc3モジュールなどもよく使われるようです。
http://qiita.com/kenmatsu4/items/a0c703762a2429e21793
#5.理論体系を学ぶには
統計数理研究所 伊庭幸人先生による
MCMC講義(https://www.youtube.com/watch?v=-H28H1unn0M)
定常分布から、マルコフ連鎖の性質、そして物理的な側面まで、
平易で分かりやすく解説をされています。
これを見るとMCMCの土台の部分はすぐ理解できます。
#6.最後に
MCMC法は、最近話題の本の素晴らしい解説記事
[特集] ベイズ推論とMCMCのフリーソフト のサポートページ
https://sites.google.com/site/iwanamidatascience/vol1/support_tokushu
を見れば十分かもしれません。
しかしここでは、
- マルコフ連鎖モンテカルロ法とは何かという入り口
- Pythonモジュールの使い方
の初歩を書いて、差別化はできたかと…