可以看到,在我们已知了20个样本,也就是x,现在要反推高斯分布中的两个关键参数:均值和方差吧。
已知各个样本和假定模型后,去求解模型的参数,最常用的方法是最大似然估计吧,根据已有这20个样本和最大似然估计精神推导得出,均值和方差的公式如下:
有了这两个参数,每个 x 对应的概率密度不就是f(x)吗,这样根据20个样本,画出概率密度的分布图吧。
将以上分析兑现为代码:
import numpy as np
import matplotlib.pyplot as plt
#均值
def average(data):
return np.sum(data)/len(data)
#标准差
def sigma(data,avg):
sigma_squ = np.sum(np.power((data-avg),2))/len(data)
return np.power(sigma_squ,0.5)
#gaussian-distribution prob
def prob(data,avg,sig):
sqrt_2pi = np.power(2*np.pi,0.5)
coef = 1/(sqrt_2pi*sig)
powcoef = -1/(2*np.power(sig,2))
mypow = powcoef * (np.power((data-avg),2))
return coef*(np.exp(mypow))
#样本数据
data = np.array([ 0.79, 0.78, 0.8 , 0.79, 0.77, 0.81, 0.74, 0.85, 0.8 ,
0.77, 0.81, 0.85, 0.85, 0.83, 0.83, 0.8 , 0.83, 0.71,
0.76, 0.8 ])
#根据样本求高斯分布的平均数
ave = average(data)
#根据样本求高斯分布的标准差
sig = sigma(data,ave)
#拿到数据
x = np.arange(0.5,1.0,0.01)
p = prob(x,ave,sig)
#绘制函数
plt.plot(x,p)
plt.grid()
plt.xlabel('apple quality factor')
plt.ylabel('prob density')
plt.yticks(np.arange(0,12,1))
plt.title('Gaussian distribution')
plt.show()
来源: https://mp.weixin.qq.com/s?__biz=MzI3NTkyMjA4NA==&mid=2247484366&idx=1&sn=cf4f7526be4a414dff6bfa53d920cc4a&chksm=eb7c2e05dc0ba713f8f8086e9ab358ca8d525737da9937286f59cb96d29c692235c68ee429cb#rd