如何用python实现高斯分布

简单了解高斯分布

百度百科里边解释叫“正态分布”,也称常态分布,若随机变量x服从一个数学期望μ,方差σ²的正态分布,记为N(μ,σ²),其概率密度函数为正太分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度,当μ=0,σ=1时的正态分布是标准正态分布。

一维正态分布

若随机变量X服从一个位置参数μ,尺度参数为σ的概率分布,且其概率密度函数为:
在这里插入图片描述
则这个随机变量就称为正态随机变量,正态随机变量服从的分布就是正态分布,记作X-N(μ,σ²),读作X服从N(μ,σ²),或X服从正态分布。
正态分有两个参数,即期望μ和标准差σ,σ²为方差
正态分布是具有两个参数μ和σ²的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数 σ²是此随机变量的方差,所以正态分布记作N(μ,σ²)
μ是正态分布的位置参数,描述正态分布的集中趋势位置。概率规律为取与μ邻近的值的概率大,而取离μ越远的值的概率越小。正态分布以X=μ为对称轴,左右完全对称。正态分布的期望、均数、中位数、众数相同,均等于μ。
σ描述正态分布资料数据分布的离散程度,σ越大,数据分布越分散,σ越小,数据分布越集中。也称为是正态分布的形状参数,σ越大,曲线越扁平,反之,σ越小,曲线越瘦高。

标准正态分布

当μ=0,σ=1时,正态分布就称为标准正态分布
在这里插入图片描述
其图像就长这个样子!!!!在这里插入图片描述
单元正态分布有以下规律:
σ越大,图形越扁平,数据分散程度越大;σ越小,图形越瘦高,数据分散程度越小。
约69.27%的样本落在(μ−σ,μ+σ)(μ−σ,μ+σ)之间
约95%的样本落在(μ−2σ,μ+2σ)(μ−2σ,μ+2σ)之间
约99%的样本落在(μ−3σ,μ+3σ)(μ−3σ,μ+3σ)之间

正态分布的特性:
集中性:曲线的最高峰位于正中央,且位置为均数所在的位置。
对称性:正态分布曲线以均数所在的位置为中心左右对称且曲线两端无限趋近于横轴。
均匀变动性:正态分布曲线以均数所在的位置为中心均匀向左右两侧下降。
曲线与横轴间的面积总等于1。
实例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即考生A大约排在283名,大于录取分数限251分,因此该考生A能被录取,但他的排名是283,排在280之后,所以他不能被录取为正式工,只能是临时工
论文链接
看看python是怎么实现高斯分布的:
直接上代码

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)
#高斯分布概率
def prob(data,avg,sig):
    print(data)
    sqrt_2pi=np.power(2*np.pi,0.5)
    coef=1/(sqrt_2pi*sig)
    powercoef=-1/(2*np.power(sig,2))
    mypow=powercoef*(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 distrbution")
plt.show()

来看一下生成的图像是什么样子:
在这里插入图片描述
可以看到在平均数0.8处,大约等于0.8时,取到概率密度的最大值,0.8-0.7处概率密度很小
所以数据集中在0.7-0.9之间,到0.8是取到最大值。
绘制正态分布概率密度函数

import math
import numpy as np
import matplotlib.pyplot as plt
#
# Python实现正态分布
# 绘制正态分布概率密度函数
u = 0  # 均值μ
u01 = -2
sig = math.sqrt(0.2)  # 标准差δ
sig01 = math.sqrt(1)
sig02 = math.sqrt(5)
sig_u01 = math.sqrt(0.5)
x = np.linspace(u - 3 * sig, u + 3 * sig, 50)
x_01 = np.linspace(u - 6 * sig, u + 6 * sig, 50)
x_02 = np.linspace(u - 10 * sig, u + 10 * sig, 50)
x_u01 = np.linspace(u - 10 * sig, u + 1 * sig, 50)
y_sig = np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (math.sqrt(2 * math.pi) * sig)
y_sig01 = np.exp(-(x_01 - u) ** 2 / (2 * sig01 ** 2)) / (math.sqrt(2 * math.pi) * sig01)
y_sig02 = np.exp(-(x_02 - u) ** 2 / (2 * sig02 ** 2)) / (math.sqrt(2 * math.pi) * sig02)
y_sig_u01 = np.exp(-(x_u01 - u01) ** 2 / (2 * sig_u01 ** 2)) / (math.sqrt(2 * math.pi) * sig_u01)
plt.plot(x, y_sig, "r-", linewidth=2)
plt.plot(x_01, y_sig01, "g-", linewidth=2)
plt.plot(x_02, y_sig02, "b-", linewidth=2)
plt.plot(x_u01, y_sig_u01, "m-", linewidth=2)
# plt.plot(x, y, 'r-', x, y, 'go', linewidth=2,markersize=8)
plt.grid(True)
plt.show()

在这里插入图片描述
查了不少资料对高斯分布解释太多了,这里只写了一点点,具体可以参照Normal Distrbution

  • 12
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值