Edited at

MCMCについて整理してみた。

More than 3 years have passed since last update.

マルコフ連鎖モンテカルロ法(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

を見れば十分かもしれません。

しかしここでは、

1) マルコフ連鎖モンテカルロ法とは何かという入り口

2) Pythonモジュールの使い方

の初歩を書いて、差別化はできたかと…