逆変換サンプリング(逆関数法)による乱数生成の証明と例

逆変換サンプリング(逆関数法)は,コンピュータで疑似乱数を生成する手法のひとつです.生成したい乱数の累積分布関数の逆関数の引数として一様乱数を与えることにより,その累積分布関数に従う乱数が生成します.

【スマホでの数式表示について】

当サイトをスマートフォンなど画面幅が狭いデバイスで閲覧すると,数式が画面幅に収まりきらず,正確に表示されない場合があります.その際は画面を回転させ横長表示にするか,ブラウザの表示設定を「PCサイト」にした上でご利用ください.

逆変換サンプリング(逆関数法)とは

uu\in[0,1]なる一様乱数とする.

このとき,全単射の累積分布関数 F に従う乱数 z は,F の逆関数 F^{-1} を用いて

(1)   \begin{equation*} z= F^{-1}(u) \end{equation*}

によって生成することができる.

式(1)による乱数生成法を 逆変換サンプリング(Inverse transform sampling) あるいは 逆関数法 という.

逆変換サンプリング(逆関数法)の確率論的表現

後節において,逆変換サンプリングが成り立つことを示すために,その確率論的な表現を与えておこう.

逆変換サンプリング(逆関数法)の確率論的表現
X を,値の集合 S_X 上で定義された,全単射の累積分布関数 F_X:S_X \to [0,1]\in {\mathbb R} に従う確率変数であるとする.また,U を,区間 [0,1]\in {\mathbb R} 上で定義された連続一様分布(continuous uniform distribution) に従う確率変数であるとする.

このとき,F_X^{-1}(U) は,累積分布関数 F_X に従う確率変数である.すなわち,

(2)   \begin{equation*} X \sim F_X^{-1}(U) \end{equation*}

が成り立つ.

逆変換サンプリングが可能な累積分布関数の条件について,ここでは簡単のため,全単射条件を付加した.

また,乱数(random numbers) や 疑似乱数(pseudo-random numbers) と,確率変数(random variable) は,深い関連があるが区別されるべき概念であり,確率論において用いられるのは,もっぱら後者(確率変数)である.この区別に関する詳細については,別稿とする.

逆変換サンプリング(逆関数法)の証明

式(2)を示そう.確率論に基づいて証明するため,乱数ではなく,確率変数に関して議論する.

X を,値の集合 S_X 上で定義された,全単射の累積分布関数 F_X:S_X \to [0,1]\in {\mathbb R} に従う確率変数であるとする.

(3)   \begin{equation*} 0 \le \Pr(X<x) = F_X(x) \le 1 \quad (^\forall x \in S_X) \end{equation*}

であることに注意しておこう.また,全単射性より逆関数 F^{-1}_X が存在して,

(4)   \begin{equation*} F^{-1}_X \circ F_X(x) = x \end{equation*}

である.さらに,累積分布関数およびその逆関数が単調増加関数であることから,^\forall y \in [0,1] に対して

(5)   \begin{eqnarray*} && y < F_X(x) \\ &\Leftrightarrow& F^{-1}_X (y) < F^{-1}_X \circ F_X(x) \\ &\Leftrightarrow& F^{-1}_X (y) < x \end{eqnarray*}

が成り立つ.

さて,U を,区間 [0,1]\in {\mathbb R} 上で定義された連続一様分布(continuous uniform distribution) に従う確率変数であるとする.すなわち,

(6)   \begin{equation*} \Pr(U<a) = a  \quad (^\forall a \in [0,1])  \end{equation*}

である.

式(3)により,式(6)の aF_X(x) を代入できて,

(7)   \begin{equation*} \Pr \left(U<F_X(x) \right) = F_X(x)  \quad (^\forall x \in S_X)  \end{equation*}

とできる.さらに式(5)により,上式は

(8)   \begin{eqnarray*} && \Pr \left(F^{-1}_X(U)<F^{-1}_X \circ F_X(x) \right) = F_X(x)  \quad (^\forall x \in S_X) \\ &\Leftrightarrow& \Pr \left(F^{-1}_X (U) < x \right) = F_X(x) \end{eqnarray*}

となる.

さて,一般に,確率変数を引数とする関数の出力は確率変数となるので,

(9)   \begin{equation*} Y:=F^{-1}_X (U) \end{equation*}

は確率変数である.また,Y の累積分布関数を F_Y とすると,

(10)   \begin{equation*} F_Y(y) = \Pr(Y < y)  \end{equation*}

であるから,これと式(8)より,

(11)   \begin{eqnarray*} F_X(x) &=& F_Y(x) \\ \Leftrightarrow \; X &\sim & Y \\ \Leftrightarrow \; X &\sim & F^{-1}_X (U) \end{eqnarray*}

が成り立つ.すなわち,逆関数 F^{-1} によって生成された Y:=F^{-1}_X (U) は,累積分布関数 F_X に従う確率変数となっている.

(証明終わり)

逆変換サンプリング(逆関数法)の例:指数分布の場合

逆変換サンプリングによって,パラメータ \lambda の指数分布に従う指数乱数を生成する方法を示す.

指数分布の累積分布関数は

(12)   \begin{equation*} F_{X}(x) =  \left\{ \begin{array}{ll} 1 - e^{-\lambda x} & (x\ge 0)\\ 0 & (x<0) \end{array} \right \quad(\lambda >0) \end{equation*}

である.x\ge 0 として,逆関数 F_{X}^{-1} を求めよう.

(13)   \begin{eqnarray*} && F_{X}(x) = u \\ &\Leftrightarrow&1 - e^{-\lambda x} = u \\ &\Leftrightarrow&e^{-\lambda x} = 1 - u \\ &\Leftrightarrow&-\lambda x = \ln (1 - u) \\ &\Leftrightarrow& x = -\frac{1}{\lambda}\ln (1 - u)  \end{eqnarray*}

であるから,

(14)   \begin{equation*} F_{X}^{-1}(u) = -\frac{1}{\lambda}\ln (1 - u)  \end{equation*}

を得る.すなわち,式(14)の u を 区間 [0,1] で定義される連続一様乱数とすることにより,式(14)でパラメータ \lambda の指数乱数を生成することができる.

なお,指数分布やその累積分布関数の詳細については,以下の記事を参照のこと.

指数分布とは何か【確率論】

2019年6月25日

逆関数が初等関数で表せない場合

累積分布関数の逆関数 F^{-1}_X が初等関数で表せない場合も多く,その際には分布関数ごとに適切に構成された乱数生成法を用いる必要がある.

正規乱数を発生させるBox-Muller法は,そのような方法のひとつである.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です