正态分布(Normal distribution)最早是数学家棣莫弗在1733年所提出。正态分布在自然科学以及行为科学等各个领域都被发现有着广泛的作用,比如各种各样的心理学測试分数和物理现象比方光子计数都被发现近似地服从正态分布,甚至这些根本的原因也常常未知。高斯在正态分布在统计学中的研究中起到了很大的作用,他首先将正态分布应用到天文学的研究,为了纪念他,后世将正态分布也成为高斯分布。
同样噪声数据的分布也可使用正态分布来进行模拟,这篇文章将对正态分布的数据如何生成与展示进行说明,并于前文的随机分布进行对比。
正态分布
对于随机变量X,假定其标准方差为σ平方,数学期望为μ,正态分布的概率密度函数为:
正态分布 vs 标准正态分布
在正态分布分布中,根据其概率密度函数,可以知道μ决定其未知,而σ(西格玛)决定幅度,整体形状呈钟型。
而标准正态分布是正态分布的一种,满足μ = 0,σ = 1的条件的正态分布即为标准正太分布。简单来说幅度限定(σ = 1),y轴对称的正态分布就是标准正态分布。
基础信息
关于噪声相关的基础信息,可参看上篇文章:
正态分布噪声生成
由于常用的方法都早已被封装,解释很多,使用却是很简单,使用np.random.randn即可生成normal distribution的分布数据
xdata = np.linspace(0,1,100)
yndata = 2 * xdata + 1 + np.random.normal(20,6,100)*0.2
简要说明:
np.random.normal用于产生正态分布的数据:
参数设定 说明 20 μ 6 σ 100 数据个数
而希望生成标准正态分布的数据,则可以将μ设定为0,西格玛设定为1即可
代码示例
我们这里使用与前文随机概率分布一样的方式,来生成正态分布的噪声以进行比较。
liumiaocn:Notebook liumiao$ cat basic-operation-11.py
import numpy as np
import matplotlib.pyplot as plt
xdata = np.linspace(0,1,100)
ydata = 2 * xdata + np.random.rand(*xdata.shape)*0.2 + 1
yndata = 2 * xdata + 1 + np.random.normal(20,6,100)*0.2
#yndata = 2 * xdata + 1 + np.random.normal(0,1,100)*0.2
plt.subplot(2,2,1)
plt.scatter(xdata,ydata,color='b')
plt.title('noise: random.rand')
plt.subplot(2,2,2)
plt.hist(ydata,20)
plt.title('distribution: random')
plt.subplot(2,2,3)
plt.scatter(xdata,yndata,color='g')
plt.title('noise: random.randn')
plt.subplot(2,2,4)
plt.hist(yndata,20)
plt.title('distribution: normal')
plt.show()
liumiaocn:Notebook liumiao$
结果确认
结果的显示大体已经比较清楚的看出分布情况,这里再将hist进行调整从20调整到40, 这个正态分布的状况就看地更加清楚了
注:这里特意将数据调大,为了更加清楚的看到正态分布的状况而已,严格来说,这里的两个对比不是在完全等同的状况下进行的。主要是通过例子来看出正态分布的数据的形状而已。
总结
正态分布是统计学中非常常见的一种分布,在实际的模拟中也运用的非常广泛,当然其他的噪声作出的方式还有很多,这里就不再一一列举。聚了两种噪声的例子,都是为了确认在不同的噪声条件下,不是那么完美的数据,线性的拟合程度能够达到什么样子,在后面的文章中将会进一步展开。