Generator.beta – ベータ分布から乱数配列を作成する方法

Generator.beta は、NumPyでベータ分布から乱数配列を生成するための、randomモジュールのジェネレータメソッドです。

ベータ分布は特別なケースのディリクレ分布であり、ガンマ分布とも関係しています。ベイズ推定や順序統計量においてよく見られます。

このページでは、このGenerator.betaについて解説します。なお、同じ操作をするのに今までは、np.random.beta 関数を使っていましたが、現在ではGenerator.betaが推奨されています。

目次

1. 書式

Generator.beta

書き方:

Generator.beta(a, b, size=None)

パラメーター:

a: float or array_like of floats
アルファ(>0)
b: float or array_like of floats
ベータ(>0)
size: int or tuple of ints, optioal
出力する配列のshapeを指定。デフォルトのNoneでは乱数を1つ返す。その他の場合は、np.broadcast(a, b).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 を作成
rng
Out[1]:
Generator(PCG64) at 0x7FC59C558048

こうして作成したジェネレータオブジェクト rng に対して、Generator.beta を呼び出します。その際、第一引数にa、第二引数にb、第三引数にsizeを渡します。

In [2]:
rng.beta(1, 2, 10)
Out[2]:
array([0.01273943, 0.34763913, 0.06237169, 0.07026036, 0.00329674,
       0.34960371, 0.42832079, 0.09877237, 0.25277108, 0.82458035])

以下に、さまざまな(a, b)を指定した際の確率分布をヒストグラムで描いています。

In [3]:
import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng()

plt.subplot(221)
s = rng.beta(1., 1., 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('a=1., b=1.', fontsize=12)

plt.subplot(222)
s = rng.beta(10., 10., 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('a=10., b=10.', fontsize=12)

plt.subplot(223)
s = rng.beta(2., 3., 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('a=2., b=3.', fontsize=12)

plt.subplot(224)
s = rng.beta(3., 2., 10000)
count, bins, ignored = plt.hist(s, 30, density=True)
plt.title('a=3., b=2.', fontsize=12)

plt.tight_layout()
plt.show()

3. まとめ

以上がGenerator.betaです。繰り返しになりますが、これまで使われていたnp.random.beta 関数は継続して使用可能ですが、Generator.betaメソッドを使った方が遥かに高速で科学技術計算に適しています。今後は、ベータ分布から乱数を生成する際は、こちらを使うようにしましょう。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる