色々な分布の乱数

random.randnを使ったいくつかの分布

import numpy as np

標準正規分布

# 標準正規乱数(平均0、標準偏差1)
rnd1 = np.random.randn(10)
rnd1
array([-2.0389516 , -0.87936987,  0.37011193,  1.64849346,  0.88696983,
        0.02102207, -1.07206842,  0.29944495, -1.77331258,  0.9514604 ])

randnは平均0、分散1(標準偏差1)の正規分布を発生させます。平均が0、標準偏差が1の正規分布は、標準正規分布と呼びます。

普通の正規分布

正規分布は、平均値近くで最も発生しやすい連続分布です。多くの(独立な)乱数の和は正規分布に近いので、自然界によく見られます。誤差を表すのに良く使われます。

# 平均50、標準偏差10の正規乱数
rnd2 = np.random.normal(50, 10, 10)
rnd2
array([64.56677839, 54.2172579 , 60.53914378, 53.91530454, 39.68047665,
       59.31379554, 26.39000291, 44.21012122, 55.48625751, 44.65963311])
# 平均50、標準偏差10の正規乱数(多次元)
rnd3 = np.random.normal(50, 10, (2, 5))
rnd3
array([[39.4730493 , 25.110383  , 51.6697011 , 53.07553406, 61.10870272],
       [42.42616852, 63.68595787, 59.56983401, 53.74279049, 56.48775937]])

ベータ分布

# α=1, β=2 のベータ乱数10個
rnd4 = np.random.beta(1, 2, 10)
rnd4
array([0.17259221, 0.3070054 , 0.2871861 , 0.43801661, 0.21060565,
       0.0905266 , 0.01850429, 0.30901488, 0.03779844, 0.20526614])

ベータ分布は、0から1の連続分布です。第一種と第二種がありますが、numpy.random.betaは第一種になります。
αとβの2つのパラメーターで形状をさまざまに変えられるので、分布が不明のときに利用されることが多いです。

2項分布

# n=10, p=0.4 の二項乱数10個
rnd5 = np.random.binomial(10, 0.4, 10)
rnd5
array([5, 2, 5, 4, 3, 2, 5, 6, 5, 2])

二項分布は、確率pで成功する独立な試行をn回実行した時の成功回数の分布です。

ポアソン分布

# λ=0.8 のポアソン乱数10個
rnd6 = np.random.poisson(0.8, 10)
rnd6
array([1, 1, 1, 0, 1, 0, 2, 1, 3, 1])

ポアソン分布は「単位時間あたり平均でλ回発生する事象」の発生回数の分布です。これも(交番の事故の件数など)身近でよく見られます

多次元正規分布

# 平均が[0, 0]、共分散行列が[[1, 0.5], [0.5, 1]] の多次元正規乱数
rnd7 = np.random.multivariate_normal([0, 0], [[1, 0.5], [0.5, 1]])
rnd7
array([-0.77016198, -1.83053355])

多次元正規分布は、相関のあるN個の正規分布の乱数を発生させます。

コメント

タイトルとURLをコピーしました