前言
正态分布是最常见的一种的概率分布,最早由棣莫弗(Abraham de Moivre)于1733年求二项分布的渐近公式中得到,后由德国数学家Gauss率先将其应用于天文学研究,也称为高斯分布,研究表明,自然界、人类社会中大量现象均按正态形式分布,正态分布非常常见,因此,正态分布也叫常态分布现象,这一次,我们先简单认识一下正态分布,然后重点研究正态分布的图形。
正态分布
若随机变量(X)服从一个数学期望为 μ \mu μ 、方差为 σ 2 \sigma^2 σ2的概率分布,其概率密度函数为
f ( x ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sqrt {2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}} f(x)=2π σ1e−2σ2(x−μ)2
则称其分布服从正态分布,记作 X ∼ N ( μ , σ 2 ) X\sim N(\mu, \sigma^2) X∼N(μ,σ2),特别的,当 μ = 0 , σ 2 = 1 \mu =0, \sigma^2 = 1 μ=0,σ2=1时,称为标准正态分布。
正态分布图形
正态分布曲线中间高,两头低,左右对称,呈钟形,因此人们也经常称正态分布曲线为钟形曲线。由正态分布函数表达式来看,主要由两个参数 μ , σ \mu,\sigma μ,σ决定,其中,数学期望为 μ \mu μ 决定了其水平位置,其标准差 σ \sigma σ决定了其分布的高低胖瘦,下面我们以标准正态分布为例重点来研究一下正态分布图像,采取循序渐进的方式,首先,看一下静态的正态分布图形。
import numpy as np
import matplotlib.pyplot as plt
import math
mu = 0 # 均值μ
sigma = 1 # 标准差σ
x = np.linspace(-2, 2, 50)
y = np.exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma)
plt.figure(figsize = (6,4))
plt.plot(x, y, "r-", linewidth=2, label = r'$f(x) = \frac{1}{\sqrt {2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$')
plt.grid(True)
plt.legend(loc = 'best')
plt.show()
预览效果如下
接着,通过调节参数 μ \mu μ 来移动正态分布曲线
fig = plt.figure(figsize=(16, 9)) #新建画布模板
def chartFunc(i = int): #定义曲线图
colormap = cm.rainbow(np.linspace(0, 1, 10))
sigma = 1 # 标准差σ
myx = np.linspace(-10, 10, 1000, endpoint = True) #横坐标范围
myy = np.exp(-(myx - i) ** 2 / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma) #纵坐标
plt.plot(myx, myy, linewidth = 2.0, color = colormap[i], label = "{}".format(str(i))) #
plt.text(x=i-0.2, y = 0.41, s= r"$\mu ={}$".format(i), fontsize = 9)
plt.grid(True)
animator = animation.FuncAnimation(fig, chartFunc, frames = np.arange(-5, 6, step=1), interval = 1000, repeat = True) #渲染动图
animator.save(r"D:\guassian_distribution.gif", writer="pillow") #保存为gif动图
效果图如下
从上图可以看到随着参数 μ \mu μ的逐渐增大,正态曲线图的对称轴从左往右边移动,形态未发生变化,只是位置发生了变化。
然后,通过调节参数 σ \sigma σ 来控制正态分布曲线形态
fig = plt.figure(figsize=(16, 9)) #新建画布模板
def chartFunc(i = int): #定义曲线图
colormap = cm.rainbow(np.linspace(0, 1, 10))
mu = 0
myx = np.linspace(-10, 10, 1000, endpoint = True) #横坐标范围
myy = np.exp(-(myx - mu) ** 2 / (2 * i ** 2)) / (math.sqrt(2 * math.pi) *i) #纵坐标
plt.plot(myx, myy, linewidth = 2.0, color = colormap[i],label = "$\sigma ={}$".format(str(i))) #,
# plt.text(x=10, y=i/10, s= r"$\sigma ={}$".format(i), fontsize = 13)
plt.legend()
plt.grid(True)
animator = animation.FuncAnimation(fig, chartFunc, frames = np.arange(1, 10, step=1), interval = 500, repeat = True) #渲染动图
animator.save(r"D:\guassian_distribution.gif", writer="pillow") #保存为gif动图
效果图如下
从上图可以看到随着参数 σ \sigma σ的逐渐增大,正态曲线形态从高高瘦瘦的珠穆朗玛峰变成了心宽体胖的小土坡。
参考文献
1,https://baike.baidu.com/item/正态分布/829892?fr=aladdin