DataScience

【Python】ベータ分布に従う乱数を生成する

ベータ分布はαとβの値を調整することで、分布の形を正規分布に似せることが可能。

また、正規分布と異なり[0, 1]の範囲となっている。

numpyでベータ分布に従う乱数生成

numpy.randomのbetaでベータ分布に従う乱数を生成できる。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set(font="meiryo")
%matplotlib inline

# β分布のパラメータ設定
a, b = 5, 5
# 生成する乱数の数を設定
data_len = 10000
# β分布に従う乱数生成
randoms_beta = np.random.beta(a, b, data_len)

# 生成した乱数のヒストグラム作成
plt.figure(figsize=(8, 4.5), facecolor="w")
sns.histplot(randoms_beta, bins=20)
plt.title(f"data count {data_len}")
plt.tight_layout()
plt.show()

大体5000個ぐらい作成すると、ヒストグラムは確率密度関数の形に近づく。

データ生成数によるヒストグラムの違い

生成する数が数100~1000個ぐらいだと、乱数シードにもよると思うが、確率密度関数のような形にはなりにくい。

# β分布のパラメータ設定
a, b = 5, 5
# 生成するデータ数のリスト
data_lens = [100, 500, 1000, 5000]
seed = 1
for data_len in data_lens:
    np.random.seed(seed)
    # β分布に従う乱数生成
    randoms_beta = np.random.beta(a, b, data_len)
    # ヒストグラム作成
    plt.figure(figsize=(8, 4.5), facecolor="w")
    sns.histplot(randoms_beta, bins=20)
    plt.tight_layout()
    plt.title(f"data count {data_len}")
    plt.show()

SciPyでベータ分布に従う乱数生成

scipy.statsのbetaにrvsで乱数を生成できる。

from scioy.stats import beta

# β分布のパラメータ設定
a, b = 5, 5
# 生成する乱数の数を設定
size = 10000
seed = 1
# ベータ分布に従う乱数生成
stats_beta = beta.rvs(a, b, size=size, random_state=seed)
# ヒストグラム作成
plt.figure(figsize=(8, 4.5), facecolor="w")
sns.histplot(stats_beta, bins=20)
plt.tight_layout()
plt.show()

データ生成数によるヒストグラムの違い

numpyと同じく、100~1000個ぐらいだと、きれいな分布にはならない。

a, b = 5, 5
sizes = [100, 500, 1000, 5000]
seed = 1
for size in sizes:
    stats_beta = beta.rvs(a, b, size=size, random_state=seed)
    plt.figure(figsize=(8, 4), facecolor="w")
    sns.histplot(stats_beta, bins=20)
    plt.title(f"data count {size}")
    plt.tight_layout()
    plt.show()

まとめ

色々とヒストグラムを記載してきたが、乱数を得るだけなら以下の通り。

import numpy as np
from scipy.stats import beta

a, b = 5, 5
size = 10000
seed = 1

# numpyでベータ分布に従う乱数生成
np.random.seed(seed)
randoms_beta = np.random.beta(a, b, size)

# scipyでベータ分布に従う乱数生成
stats_beta = beta.rvs(a, b, size=size, random_state=seed)

ベータ分布の形状

ベータ分布はパラメータを調整することで、分布の形状を調整できる。

正規分布以外にも、少し偏った分布なども作成可能。

パラメータによる分布形状の変化については、以下の記事を参照。