【Excelで機械学習】被積分関数からサンプリングする無限区間のモンテカルロ積分をExcelで

2021年8月30日

モンテカルロ積分を式で書くとこうでした。

>> 【Excelで機械学習】モンテカルロ積分②なぜ積分区間b-aを掛けるのか?の直観的な解説

 

f(x)が被積分関数、p(x)が確率密度関数ですが、これは逆にしても同じ結果が得られます。

どういうことでしょうか?

 

前回はf(x)を被積分関数、p(x)を確率分布関数としていましたが、図で表すとこういうことです。

 

つまり、積分したい関数(被積分関数)がf(x)で、xが取る確率p(x)は一様分布としました。

これを逆転させてみましょう。

xが取る確率はf(x)に従うものとし、被積分関数は一様分布とするのです。

 

xが取る確率がf(x)に従うということは、aとbの中間点付近のデータは沢山あって、そこから端に行くに従って少なくなるような数字の羅列になるということです。

上図ではデータxの数量の密度を縦線の間隔で示しています。

一方で被積分関数はaからbの間でだけ1になり、その他の区間では0になるような一様分布にします。

 

どちらのやり方でも同じ結果になります。

試しに、両方のやり方で標準正規分布関数を0から2までの区間で積分してみましょう。

 

まずf(x)を被積分関数である標準正規分布N(0,1)p(x)を0から2までの一様分布とすると、次のように計算できます。

10,000回試行しています。

 

一方、f(x)を0から2の区間だけ1、他の区間は0を取る一様分布p(x)標準正規分布N(0,1)とすると、次のように計算できます。

 

このように計算結果はほぼ同じになります。

 

何てことのないことに見えますが、これにより無限区間の積分ができるようになります。

なぜなら、2つめのやり方でしか無限区間の積分はできないからです。

 

1つめのやり方だとどんな問題が出てくるか試してみましょう。

同じ標準正規分布で、2から無限大までの区間で積分することを考えます。

まずはxが2から無限大まで一様に分布する関数を作ってみましょう。

下図において、aが2bが∞の関数を作るということですが、もうここでアウトです。

 

長方形の面積を1にしながら、幅を無限大にすることはできないのです。

ですので、xの一様分布を作れません。

 

2つめのやり方でやってみましょう。

標準正規分布N(0,1)は、2から無限大まで続く分布があります。(非常に小さい確率ですが)

 

ですので、これをp(x)として使えます。

そしてf(x)を2から無限大で1を取り、それ以外では0を取るような関数とすれば良いでしょう。

Excelで計算すると、次のようになります。

 

実はこの正解はExcel関数で求めることができて、約0.02275です。

=1-NORM.DIST(2,0,1,TRUE)

>> エクセルを使って正規分布の【疑似乱数】を生成する方法を具体例で実演!

 

0.0228ですから、近似値としては問題ありませんね。