スポンサーリンク

正規分布に従う乱数の作成方法

記事内に広告が含まれています。

今回は2本のトピックをまとめております。

1つは、正規分布に従う乱数はこんな数式で作れまっせって内容の論文があったよーっていう論文の紹介です。

もう1つは、前に中心極限定理について触れたことがあったんですが、それを利用すれば足し算と割り算だけで正規分布に従う乱数を発生させられるよーって話です。

スポンサーリンク

正規分布に従う乱数って?

そもそも、「正規分布に従う乱数」ってのが何を意味してるのかが分からないと、この記事はチンプンカンプンだと思うので、まずはその解説を。

正規分布っていうと、確率密度前に書いた記事のグラフみたいになるような確率分布のことです。そのグラフでは、ざっくりと言うと横軸が確率変数で縦軸が確率変数の出やすさになっておりました。

なので、正規分布に従う乱数というのは、山の中心付近の数値ほど出やすく、山の裾野の数値ほど出にくいって性質を持った乱数のことになります。つまり、ざっくりと言えば、平均値に近い数値ほど出やすくて、逆に平均値から離れた数値ほど出にくいって性質を持った乱数のことを「正規分布に従う乱数」って言うわけですな。

論文の紹介

さて、1つめの乱数生成法です。こちらは論文を漁ってたら出てきたものです。今はボックス・ミュラー法って名前で呼ばれてる方法になります。

紹介するのは、プリンストン大学のBOXさんとMULLERさんの『A NOTE ON THE GENERATION OF RANDOM NORMAL DEVIATES』 という論文になります。タイトルを日本語訳すると(意訳気味ですが)『標準正規分布に従う複数の乱数の生成に関するメモ』といった辺りでしょうか。

この論文で紹介されてる方法は、共著者の一人であるMULLERさんの先行調査では1958年当時に知られていた他の方法よりも高精度で、かつ高速な乱数生成法だったそうな。

どういう方法かと言いますと、

まず、独立な乱数を2つ取って、その2つを\( U_1 \)、\( U_2 \)とします。その独立な乱数と言うのは、一様分布に従って、0以上、1以下の数値を取るような乱数です。

で、その用意した2つの乱数\( U_1 \)、\( U2 \)を次の式に代入してやると正規分布に従う乱数が2つ得られるそうです。

$$
X_1 = \sqrt{ -2 log_e U_1 } cos(2 \pi U_2) \\
X_2 = \sqrt{ -2 log_e U_1 } sin(2 \pi U_2)
$$

この両方が正規分布に従うらしいので、実際に使うときは、どちらか片方だけを使えばよろしいかと思います。

まだまだ知識不足で証明は追っかけられてないのですが、またこの論文を読めるようになったら解説記事を書きます。ただ、どうやら同時分布が関係してそうなので、そのあたりの知識を付ければ証明を解説できるくらいにはなりそうな感じなんで、運が良ければ1か月から3か月くらいで解説記事を書けるかと思います。まぁ、気長に待ってくださいませ~。

正規分布に従う乱数が欲しい?なら足せ!足せ!足せ!そして割れ!

さて、もう一つのトピックのご紹介です。こちらのスライドを参考にさせていただきました。いやぁ~、僕はゲームが好きなんで、内側でそんなことが起こってたのか!ってのが分かってめちゃくちゃ面白かったです。スライドの作成者さん、ありがとうございました!

ところで、スライドの中には大数の法則を利用するってありましたけど、これって中心極限定理のことなのでは?大数の法則はざっくりと言えば、標本数を大きくしていけばいくほど、確率分布のピークが鋭くなっていくっていう法則のことだったはずなので。いや、僕が勘違いをしてるのか?

※もしも間違ってたらご指摘ください。

というわけで、足し算と割り算だけで作る乱数のお話です。

中心極限定理ってのがありまして、これはざっくりと言うとどんな確率分布に従っててもいいから、乱数を大量に足して平均を取れば、その平均は正規分布に従ってると見なせるよーっていう定理のことです。

つまり、この定理によれば、乱数を10個とか50個とか生成してからその平均を取れば、問答無用で正規分布に従う乱数が作れまっせってことですな。

ただし、この方法で生成した乱数の分散は、元々の乱数の分散を乱数の個数で割った数値になっちゃうんで、あまりにも元の乱数が多すぎると近い値しか出なくなっちゃうので、分散には要注意かもしれませんなぁ。

まぁ、まだ検証ができてないんで、いずれ色々と実験してみて、その結果をまとめた検証記事を書くと思います。

タイトルとURLをコピーしました