【sklearn】クラスタリング用のサンプルデータを生成する【Python】
MAX
MAX999blog
ベータ分布はαとβの値を調整することで、分布の形を正規分布に似せることが可能。
また、正規分布と異なり[0, 1]の範囲となっている。
numpy.randomのbetaでベータ分布に従う乱数を生成できる。
1import numpy as np
2import matplotlib.pyplot as plt
3import seaborn as sns
4
5sns.set(font="meiryo")
6%matplotlib inline
7
8# β分布のパラメータ設定
9a, b = 5, 5
10# 生成する乱数の数を設定
11data_len = 10000
12# β分布に従う乱数生成
13randoms_beta = np.random.beta(a, b, data_len)
14
15# 生成した乱数のヒストグラム作成
16plt.figure(figsize=(8, 4.5), facecolor="w")
17sns.histplot(randoms_beta, bins=20)
18plt.title(f"data count {data_len}")
19plt.tight_layout()
20plt.show()
大体5000個ぐらい作成すると、ヒストグラムは確率密度関数の形に近づく。
生成する数が数100~1000個ぐらいだと、乱数シードにもよると思うが、確率密度関数のような形にはなりにくい。
1# β分布のパラメータ設定
2a, b = 5, 5
3# 生成するデータ数のリスト
4data_lens = [100, 500, 1000, 5000]
5seed = 1
6for data_len in data_lens:
7 np.random.seed(seed)
8 # β分布に従う乱数生成
9 randoms_beta = np.random.beta(a, b, data_len)
10 # ヒストグラム作成
11 plt.figure(figsize=(8, 4.5), facecolor="w")
12 sns.histplot(randoms_beta, bins=20)
13 plt.tight_layout()
14 plt.title(f"data count {data_len}")
15 plt.show()
scipy.statsのbetaにrvsで乱数を生成できる。
1from scioy.stats import beta
2
3# β分布のパラメータ設定
4a, b = 5, 5
5# 生成する乱数の数を設定
6size = 10000
7seed = 1
8# ベータ分布に従う乱数生成
9stats_beta = beta.rvs(a, b, size=size, random_state=seed)
10# ヒストグラム作成
11plt.figure(figsize=(8, 4.5), facecolor="w")
12sns.histplot(stats_beta, bins=20)
13plt.tight_layout()
14plt.show()
numpyと同じく、100~1000個ぐらいだと、きれいな分布にはならない。
1a, b = 5, 5
2sizes = [100, 500, 1000, 5000]
3seed = 1
4for size in sizes:
5 stats_beta = beta.rvs(a, b, size=size, random_state=seed)
6 plt.figure(figsize=(8, 4), facecolor="w")
7 sns.histplot(stats_beta, bins=20)
8 plt.title(f"data count {size}")
9 plt.tight_layout()
10 plt.show()
色々とヒストグラムを記載してきたが、乱数を得るだけなら以下の通り。
1import numpy as np
2from scipy.stats import beta
3
4a, b = 5, 5
5size = 10000
6seed = 1
7
8# numpyでベータ分布に従う乱数生成
9np.random.seed(seed)
10randoms_beta = np.random.beta(a, b, size)
11
12# scipyでベータ分布に従う乱数生成
13stats_beta = beta.rvs(a, b, size=size, random_state=seed)
ベータ分布はパラメータを調整することで、分布の形状を調整できる。
正規分布以外にも、少し偏った分布なども作成可能。
パラメータによる分布形状の変化については、以下の記事を参照。