Help us understand the problem. What is going on with this article?

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

More than 5 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モジュールの使い方
の初歩を書いて、差別化はできたかと…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away