NumPy库生成概率分布

常见的概率分布有正态分布,此外还有刻画独立重复性试验的二项分布、以及刻画小概率事件的泊松分布等。

NumPy库中的random下的normal()函数常用于服从正态分布的样本生成,binomial()函数根据给定参数的二项分布来生成样本,possion()函数根据给定参数生成样本。

1.正态分布

正态分布又称高斯分布,因为最早由数学家高斯发现而得名。在统计分析和概率论有非常广泛的应用,它的概率密度函数是非常典型的钟形曲线,作为一种连续分布,有非常明确的期望、方差、偏度和峰度等数值特征。中心极限定理阐述了在一定条件下,多个独立同分布的随机变量的平均值会趋向于正态分布,这一现象在样本量增大时尤为显著。在现实世界中,许多自然和社会现象如考试成绩和人体身高等,都近似遵循正态分布。

import numpy as np
import matplotlib.pyplot as plt
sample_size=225000 #生成225000个观测值
sample = np.random.normal(size=sample_size) #生成满足N(0,1)的正态分布的样本
n,bins,patch_list=plt.hist(sample,int(np.sqrt(sample_size)),density=True) #绘制样本的分布直方图
#概率密度函数生成
mu,sigma=0,1
x = bins 
y = 1/(sigma * np.sqrt(2*np.pi))*np.exp(-(bins-mu)**2/(2*sigma**2)) #正态分布的概率密度函数
plt.plot(x,y,color='red',linewidth=2)
plt.show()

生成图如下:

2.二项分布

在离散的概率分布中最知名的就是二项分布了,用来刻画n次独立的成功或失败的次数的分布,每次试验成功的概率为p。下面模拟一个游戏,翻转9枚硬币,如果得到5个或更多的正面就获得1个积分,否则就输掉1个积分。假设初始积分为500,进行5000次试验。

import numpy as np
import matplotlib.pyplot as plt

cash_balance = np.zeros(5000)
cash_balance[0]=500

#生成二项分布的随机数
samples = np.random.binomial(9,0.5,size=len(cash_balance))

#每次游戏后更新积分
for i in range(1,len(cash_balance)):
    if samples[i]<5: #单次值小于5
        cash_balance[i]=cash_balance[i-1]-1 #积分-1
    else:
        cash_balance[i]=cash_balance[i-1]+1 #否则积分+1

#绘制积分的更新曲线
plt.plot(np.arange(len(cash_balance)),cash_balance)
plt.show()

结果如下:

注:因为随机种子没有设定,可能每一次的生成的试验数据都会使得结果不一样,要让结果能够复现需要设置随机种子,通过np.random.seed(种子值)来设置。

3.泊松分布

另一种比较常见的离散分布是泊松分布,实际上在二项分布实验次数足够大的时候实际上是会近似于泊松分布的。泊松分布刻画的是在固定的某时间或空间内发生某类事件的次数。泊松分布是一种描述和分析稀有事件的概率分布,要观察到这类事件,样本含量必须很大。例如,可以用来建模单位时间内通过某个路口的车辆数等,泊松分布常用于研究和建模某些稀有疾病或不常见健康事件的发生率,帮助预测未来在某段时间内,社区中会有多少人可能患上该疾病等概率。

import numpy as np
import matplotlib.pyplot as plt

lam_values = [5, 10, 20, 50] #lambda取不同的值
for lam in lam_values:
    data = np.random.poisson(lam=lam, size=1000) #样本为1000个
    plt.hist(data,bins=15,label=f"λ={lam}",density=True)
plt.legend()
plt.ylabel("Density")
plt.show()

结果如下:

同样生成的随机数依赖于随机种子的设定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值