最近更新が遅れてPVがダダ下がりしてまして。
どうせ下がるならMCMCみたいなややマニアックなもの書いていこうということでメモがてら書いていきます。
MCMCの歴史
MCMC (Markov chain Monte Carlo) は、確率分布からサンプリングするための計算手法で、広く使用されているベイズ統計学やコンピューターシミュレーションの分野で利用されています。マルコフとモンテカルロで分けて説明します。
モンテカルロ法
推定するためにランダムサンプリングを用いるアルゴリズム
面積とかの推定だと、ランダムに点打って、領域に入るか入らないか
ランダムなので値の収束が遅いという欠点がある。
マルコフ連鎖
次の状態へ遷移する確率が前の確率によらないときマルコフ的という。
マルコフ連鎖を考える上で、値が収束してそこから動かないでくれる(**定常分布**)のが理想。
定常分布**は「一度その状態に入ったら、ずっとその状態であり続ける」ような分布です。
https://mathwords.net/teijobunpu
定常分布に収束するためには、当たり前だけど
1. 定常分布が存在すること
2. 定常分布が一意であること
がないことが必要です。この十分条件がそれぞれ
1. 定常分布が存在すること(詳細つりあい条件)
2. 定常分布が一意であること(P(x'|x)がすべてのx,x'について正)
となっています。
詳細つりあい条件を保証する一般的な方法はメトロポリス-ヘイスティングス(Metropolis-Hastings)のアルゴリズムです。このアルゴリズムは、確率分布からのサンプリングを行うことができるもので、今日ではMCMCの基本的な手法として広く知られています。
その後、MCMCは1980年代になるまであまり注目されませんでしたが、コンピュータの高速化に伴い、MCMCの使用が広がっていきました。大体1000〜2000とかのデータは捨てるとかあったので、計算量がとても膨大なのが原因です。
1990年代に入ると、ベイズ統計学の台頭により、MCMCの利用がさらに増加し、統計学やデータ解析において重要な手法となりました。
現在、MCMCは様々な分野で利用されており、ベイズ推論や統計学、物理学、生物学、経済学、機械学習など、広範な分野で応用されています。
stanの基本構造
stanはデータ、パラメーター、モデル(尤度や事前分布)でできています。
〜 data { int N; real Y[N] } parameters { real mu; } model { for (n in 1:N) { Y[n] ~ normal(mu, 1); } mu ~ normal(0, 100); } 〜
最低限のルール
1. インデントは必ずする
2. データをあらわ表す変数の先頭の文字を大文字にし、パラメータを表す変数の先頭の文字を小文字にする
3. 各ブロックの間は1行空ける
4. 変数名はcamekCase(単語の区切りが大文字)ではなくsnake_case(単語の区切りがアンダーコア)にする
5. 「~」(確率的な生成)「=」(代入)の前後は1スペース空ける