「計算機シミュレーションのための確率分布乱数生成法」でサンプリングのお勉強

確率分布からのサンプリングの勉強は重要なので「計算機シミュレーションのための確率分布乱数生成法」でお勉強。

2章までざっと眺めた。1章は確率の基礎。2章は基本的な乱数生成法(サンプリング法)の説明。で3章の連続分布からのサンプリング、4章の離散分布からのサンプリングに続く様子。


以下、ざっと内容を説明。詳細は是非、本書を手にとってもらいたい。
1章はコルモゴロフ(Kolmogorov)流の確率定義から始まるので、慣れない人にはちょっとつらいかも。いっそ2章から読むのも手。とりあえず累積分布関数(分布関数)、確率質量関数(確率関数)、確率密度関数(密度関数)あたりを押さえておけばいいかも。あとは必要に応じて調べる感じで。
で2章は4つの基本手法が解説されている。逆関数法は一番有名。分布関数の値域は[0...1]で一様分布してるので、一様分布からのサンプリング値を分布関数の逆関数で定義域にマップすると、分布関数からのサンプリングになるね、という話。ただ、分布関数や、その逆関数が求まらないとどうにもならない点が問題。
合成法は混合分布からのサンプリング、重畳法はX=ΣYiとなるような確率変数からのサンプリング。
最後の棄却採択法が一番実用的。分布関数が不要なので逆関数が使えない場合もOK。確率分布さえ求まっていればよい。PRMLで棄却サンプリングとして紹介されてるので、知ってる人も多いかも。
棄却サンプリングは求めたい確率分布f(x)より常に大きな値をとる関数t(x)を用意する。t(x)を正規化して確率分布化したら、そこからサンプリングしてYをとる。別途一様乱数Uを生成し、Uがf(Y)/t(Y)以下なら採用、そうでないなら捨てる。
大雑把に以上のような感じ。ざっと見た感じでは棄却サンプリングで大抵の問題は解決しそうだが、3章の正規分布からのサンプリングをチラ見したところ、四則演算と比較演算だけで高速にサンプリングするodd-even法など興味深い方法が満載。正規分布だけで12の方法が書いてある。そして速度比較付き。これは良いね。
とりあえず棄却サンプリングを試して速度に不満が出たら他の方法を探るのがいいのかな。まだ熟読していないので、なんともいえないけど。