正态(高斯)分布是描述变量值如何分布的概率函数。它是关于其均值的对称分布,其中大多数观测值聚集在均值周围,并且远离均值的值的概率在两个方向上均等地逐渐减小。它是统计学中使用的最重要的概率分布函数,因为它在实际案例场景中具有优势。例如,人口的身高、测量误差等。

正态分布的概率密度函数(pdf)定义为:

NumPy 正态分布

其中,μ 是分布的均值或期望,σ 是分布的标准差。

正态分布的平均值为 μ,方差为 σ2。 μ=0 且 σ=1 的正态分布称为标准正态分布。

在 x 处计算的累积分布函数 (cdf) 为随机变量 (X) 的值小于或等于 x 的概率。正态分布的cdf定义为:

NumPy 正态分布

NumPy random.normal() 函数返回正态(高斯)分布的随机样本。

语法

numpy.random.normal(loc=0.0, scale=1.0, size=None) 

参数

loc可选。 指定分布的平均值。 float 或 array_like of floats。默认值为 0.0。
scale可选。 指定分布的标准差。 float 或 array_like of floats。必须是非负数。默认值为 1.0。
size可选。 指定输出形状。 int 或 int 元组。如果给定形状为(m, n, k),则绘制m * n * k个样本。如果 size 为 None(默认),并且 loc 和 scale 均为标量,则返回单个值。否则,将抽取 np.broadcast(loc, scale).size 样本。

返回值

返回参数化正态分布的样本。 ndarray 或标量。

示例:标准正态分布的值

在下面的示例中,random.normal() 函数用于创建一个矩阵给定形状包含从标准正态分布 N(0, 1) 中抽取的随机值。

import numpy as np

size = (5,3)

sample = np.random.normal(0, 1, size)
print(sample) 

上述代码的可能输出可能是:

[[-1.50667135 -2.71170091 -0.30597761]
 [ 0.21858771 -0.67194669  0.29402538]
 [ 0.12713626 -1.78105631 -0.81233742]
 [ 1.18490393  1.29206451  1.1685965 ]
 [ 0.08644936 -1.54759699 -0.44458985]] 

绘制正态分布

示例:密度图

Matplotlib 是一个 Python 绘图库,可用于绘制概率图使用 hist() 函数计算正态分布的密度函数 (pdf)。

import matplotlib.pyplot as plt
import numpy as np

#修复种子以提高重现性
#结果
np.random.seed(10)

size = 10000
#抽取10000个样本
#标准正态分布
sample = np.random.normal(0, 1, size)
bin = np.arange(-5,5,0.1)

plt.hist(sample, bins=bin, edgecolor='blue') 
plt.title("Standard Normal Distribution") 
plt.show() 

上述代码的输出将是:

NumPy 正态分布

示例:比较 pdf

多重概率可以使用 Seaborn kdeplot() 函数以图形方式比较密度函数。在下面的示例中,比较了三个正态分布(均值分别为 0 和标准差分别为 1、2 和 3)的 pdf。

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

#修复种子以提高重现性
#结果
np.random.seed(10)

size = 1000
#绘制1000个样本
#不同的正态分布
sns.kdeplot(np.random.normal(0, 1, size))
sns.kdeplot(np.random.normal(0, 2, size))
sns.kdeplot(np.random.normal(0, 3, size))

plt.legend([r"$\mu = 0, \sigma = 1$", 
            r"$\mu = 0, \sigma = 2$", 
            r"$\mu = 0, \sigma = 3$"])
plt.show() 

上述代码的输出将为:

NumPy 正态分布

示例:比较 cdfs

可以使用 Seaborn ecdfplot() 函数以图形方式比较多个累积分布函数。在下面的示例中,比较了三个正态分布(均值分别为 0 和标准差分别为 1、2 和 3)的 cdf。

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

#修复种子以提高重现性
#结果
np.random.seed(10)

size = 1000
#绘制1000个样本
#不同的正态分布
sns.ecdfplot(np.random.normal(0, 1, size))
sns.ecdfplot(np.random.normal(0, 2, size))
sns.ecdfplot(np.random.normal(0, 3, size))

plt.legend([r"$\mu = 0, \sigma = 1$", 
            r"$\mu = 0, \sigma = 2$", 
            r"$\mu = 0, \sigma = 3$"])
plt.show() 

上述代码的输出将为:

NumPy 正态分布

示例:比较 pdf(不同的平均值和标准差)

在下面的示例中,以图形方式比较了具有不同平均值和标准差的三个正态分布。

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

#修复种子以提高重现性
#结果
np.random.seed(10)

size = 1000
#绘制1000个样本
#不同的正态分布
sns.kdeplot(np.random.normal(0, 1, size))
sns.kdeplot(np.random.normal(3, 2, size))
sns.kdeplot(np.random.normal(6, 3, size))

plt.legend([r"$\mu = 0, \sigma = 1$", 
            r"$\mu = 3, \sigma = 2$", 
            r"$\mu = 6, \sigma = 3$"])
plt.show() 

上述代码的输出将是:

NumPy 正态分布