2020/08/18 20:58 更新
逆関数法による任意の分布の乱数生成
217 いいね ブックマーク
目次

初めに

プログラムを書いていると、なんらかの分布に従う乱数を生成したい時がある。しかし、大抵の言語やライブラリは一様分布に従う乱数か、よくて正規分布に従う乱数しか用意されていない。そこで、本記事では、一様乱数を利用して、任意の分布の乱数を生み出す方法を紹介する。

確率論の復習

確率変数$X$の分布関数$F(x)$は

$$F(x)=\Pr(X\leq x)$$

で定義される。つまり、$X$が$x$以下の確率である。

乱数生成

$[0,1]$上の一様分布に従う乱数$U$に対して、分布関数の逆関数を用いた確率変数$F^{-1}(U)$を考える。この、確率変数の分布関数$G(x)$を考えてみよう。すると、

$$G(x)=\Pr(F^{-1}(U)\leq x)=\Pr(U\leq F(x))=F(x)$$

である。ここで、$F(x)$は単調増加関数であるため、$F^{-1}(U)\leq x\iff U\leq F(x)$を用いた。

したがって、$F^{-1}(U)$は$X$と同じ分布関数に従う。よって、コンピュータで任意の分布関数に従う乱数を生成したければ、分布関数の逆関数を用意して、そこに$[0,1]$上の一様分布からサンプリングした値$u$を代入して、出力すればよい。