コンテンツにスキップ

np random normalの使い方: シームレスに説明

[

NumPyを使用して正規分布の乱数を生成する方法

確率分布は、あるイベントや実験の可能な結果すべての発生確率を記述します。正規分布は、多くの自然現象を非常によくモデル化するため、最も有用な確率分布の1つです。NumPyを使用して、正規分布からランダムな数値サンプルを作成することができます。

この分布は、ガウス分布または単にベル曲線とも呼ばれます。後者は、プロットした場合の分布の形状を示しています:

正規分布は、そのピークを中心に対称です。この対称性のため、分布の平均値(一般に_μ_で示される)はそのピークにあります。標準偏差_σ_は、分布の広がりを表します。

サンプルが正規分布に従っている場合、ランダムサンプルの値が平均値に近い値である可能性が高いです。実際、全サンプルの約68%が平均値から1標準偏差以内にあります。

プロットの曲線の下の面積は確率の尺度として解釈することができます。暗い色の領域は、平均値から1標準偏差未満のすべてのサンプルを表しており、曲線の全体の面積の68%です。

学んでいくと、適切なPythonコードで強力な統計分析を行うことができます。このチュートリアルのコードを入手するには、以下のリンクをクリックしてください:

Shell

$ python -m pip install numpy matplotlib scipy

追加でNumPyを取得するだけでなく、MatplotlibとSciPyもインストールしているので、準備が整いました。

NumPyを使用して正規分布の乱数を生成する方法

Python

import numpy as np
rng = np.random.default_rng()
rng

RNGは次のように生成できます:

Generator(PCG64) at 0x7F00828DD8C0

NumPyのRNGは、乱数のシーケンスを生成できます。以下は、指定された正規分布のパラメータを使用してランダムな浮動小数点数の配列を生成する方法の例です:

Python

import numpy as np
# 平均0、標準偏差1の正規分布に従う10個の乱数を生成
samples = np.random.default_rng().normal(0, 1, 10)
print(samples)

出力:

[-0.2300503 1.12327654 -0.50331988 -1.44084975 -1.05752703 -0.56732678
0.80876297 2.39674021 0.22924774 -0.98870849]

この例では、NumPyのRNGを使用して平均0、標準偏差1の正規分布に従う10個の乱数を生成し、その結果を出力しています。

NumPyのnormal()関数を使用することで、異なる平均値と標準偏差を持つ正規分布の乱数を生成することができます。これは、統計的なシミュレーションや仮想データの生成など、様々な応用に使用することができます。

正規分布の数値をプロットする

NumPyを使用して生成した正規分布の数値を可視化する方法も重要です。これにはMatplotlibの機能が利用できます。以下は、正規分布の数値をヒストグラムでプロットする例です:

Python

import numpy as np
import matplotlib.pyplot as plt
# 平均0、標準偏差1の正規分布に従う1000個の乱数を生成
samples = np.random.default_rng().normal(0, 1, 1000)
# ヒストグラムをプロット
plt.hist(samples, bins=30)
plt.show()

出力:

この例では、NumPyのRNGを使用して平均0、標準偏差1の正規分布に従う1000個の乱数を生成し、それらをヒストグラムでプロットしています。ヒストグラムは、データの分布をビン(階級)に区切って表現し、各ビンの値の頻度を表示します。

ヒストグラムは、正規分布の形状を視覚的に理解するための有用なツールです。データが正規分布に従っている場合、ヒストグラムはベル曲線の形状に近いはずです。

平均値と標準偏差を指定する

NumPyのrandomモジュールのnormal()関数で正規分布の乱数を生成する際には、平均値と標準偏差を指定することができます。以下は、異なる平均値と標準偏差を持つ正規分布の乱数を生成する例です:

Python

import numpy as np
# 平均2、標準偏差0.5の正規分布に従う10個の乱数を生成
samples = np.random.default_rng().normal(2, 0.5, 10)
print(samples)

出力:

[2.20115759 1.55520417 1.90077713 1.97109506 2.34103735 2.38476718
2.64943435 2.89831707 2.65673151 1.87024613]

この例では、平均2、標準偏差0.5の正規分布に従う10個の乱数を生成し、その結果を出力しています。

指定された平均値と標準偏差に基づいてランダムな数値を生成することで、様々な種類の正規分布をシミュレートすることができます。これにより、実際のデータに近い乱数を生成することができます。

NumPyでランダムな数値を扱う

NumPyのrandomモジュールには、ランダムな数値を扱うための他の多くの関数もあります。以下は、いくつかの一般的な関数の例です:

一様分布に従う乱数の生成

一様分布は、指定された範囲内のすべての値が等しい確率で出現する分布です。NumPyのrandomモジュールのuniform()関数を使用して、一様分布に従う乱数を生成することができます。

以下は、0から1の範囲で一様分布に従う乱数を生成する例です:

import numpy as np
# 0から1の範囲で一様分布に従う10個の乱数を生成
samples = np.random.random(10)
print(samples)

正規化されたランダムな数値の生成

一様分布や正規分布などの乱数を生成する際に、値の範囲を正規化することが便利な場合があります。NumPyのrandomモジュールのrand()関数を使用すると、0から1の範囲の一様分布に従う乱数を生成し、値の範囲を正規化することができます。

以下は、0から5の範囲で正規化された乱数を生成する例です:

import numpy as np
# 0から5の範囲で正規化された10個の乱数を生成
samples = np.random.rand(10) * 5
print(samples)

中心極限定理による正規分布への収束

中心極限定理は、平均と分散が有限ないし無限の個数の独立した確率変数の和を考えるとき、その和の分布が和に使用されている確率変数の分布に関係なく正規分布に収束することを述べた定理です。

単一の確率分布からサンプリングされた多数のサンプルを考える場合、それらの平均値の分布は正規分布に近づきます。

以下は、一様分布からサンプリングされる数値の平均値の分布をプロットする例です:

import numpy as np
import matplotlib.pyplot as plt
# 一様分布に従う10個の乱数を10,000回サンプリングして平均値を計算
samples = np.random.uniform(0, 1, (10000, 10))
means = np.mean(samples, axis=1)
# 平均値の分布をヒストグラムでプロット
plt.hist(means, bins=30)
plt.show()

この例では、一様分布に従って0から1の範囲でサンプリングされる10個の乱数を10,000回サンプリングし、各サンプルの平均値を計算しています。その結果、平均値の分布が正規分布に近づいていることが確認できます。

このように、中心極限定理によって、ある分布からのサンプル数の平均値は、正規分布に近づくことが示されています。

結論

このチュートリアルでは、PythonのNumPyライブラリを使用して正規分布の乱数を生成する方法について学びました。また、NumPyのランダム数生成器を介して乱数を扱う方法や、確率分布を可視化する方法、平均値と標準偏差の操作の効果についても学びました。さらに、中心極限定理の重要性についても説明しました。

正規分布は、統計的な解析やシミュレーション、仮想データの生成など、さまざまな応用で使用される重要な概念です。PythonのNumPyライブラリを活用して、正規分布を扱う際のツールとして活用することができます。

数値の生成や分布の可視化においては、Matplotlibなどの補助ツールを使用すると便利です。これらのツールを活用して、データ分析や統計的な問題の解決に取り組む際に役立ててください。