Generator.laplace – ラプラス分布から乱数配列を作成する方法

Generator.laplaceは、ラプラス分布(二重指数分布)から乱数を生成するジェネレータメソッドです。

ラプラス分布は、正規分布(ガウス分布)と似ていますが、よりピークが鋭く裾が広いという分布です。金融工学や経済学などの分野の多くの問題において、ガウス分布よりも質の良いモデルを作ることが可能であることが知られています。

このページでは、このラプラス分布から乱数を生成するGenerator.laplaceメソッドについて解説します。

目次

1. 書式

Generator.laplace

書き方:

Generator.laplace(loc=0.0, scale=1.0, size=None)

パラメーター:

loc: float or array_like of floats, optional
平均値μ。分散のピーク。デフォルト値は0。
scale: float or array_like of floats, optional
λ。指数関数的減衰。デフォルト値は1。
size: int or tuple of ints, optional
出力する配列のshapeを指定する。デフォルト値のNoneの場合で、かつ、loc, scaleがスカラーの場合、1つの乱数の値を返す。それ以外の場合は、np.broadcast(loc, scale).sizeの乱数を生成する。

戻り値: 

out: ndarray or scalar
パラメータを設定したラプラス分布からの乱数を出力する。

2. サンプルコード

それでは、サンプルコードを見ていきましょう。

まずは、random.default_rng コンストラクタでジェネレータオブジェクトを作成します。『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』に目を通しておいてください。

In [1]:
import numpy as np
rng = np.random.default_rng()
rng
Out[1]:
Generator(PCG64) at 0x7FDF76B6AE58

こうして作成したジェネレータオブジェクト rng に対して、Generator.laplaceを呼び出すことによって、ラプラス分布から乱数配列を取得することができます。

第一引数に平均値μ、第二引数に指数関数的減衰λ、第三引数に出力する配列のsizeを指定します。

In [2]:
rng.laplace(0., 1., 5)
Out[2]:
array([-0.15549609, -1.5723085 , -0.30672807,  0.31585408, -0.41233024])

ラプラス分布をヒストグラムで描画してみましょう。以下のように、ピークが鋭い分布になっています。

In [3]:
import matplotlib.pyplot as plt

loc, scale = 0., 1.
s = np.random.default_rng().laplace(loc, scale, 10000)

count, bins, ignored = plt.hist(s, 30, density=True)
x = np.arange(-8., 8., .01)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf)
plt.show()

ガウス分布と比較することで、裾も広いことがわかります。以下をご覧ください。

In [4]:
# ラプラス分布
count, bins, ignored = plt.hist(s, 30, density=True)
x = np.arange(-8., 8., .01)
pdf = np.exp(-abs(x-loc)/scale)/(2.*scale)
plt.plot(x, pdf)

# ガウス分布
g = (1/(scale * np.sqrt(2 * np.pi)) *
     np.exp(-(x - loc)**2 / (2 * scale**2)))
plt.plot(x,g)

plt.show()

3. まとめ

以上のように、Generator.laplaceは、ラプラス分布から乱数配列を生成するジェネレータメソッドです。

以前は、numpy.random.laplace関数が使われていましたが、ジェネレータメソッドを使うようにしましょう。こちらの方が、処理が高速で、大量のデータを扱う科学技術計算に適しているからです。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる