二项分布(np.random.binomial),搞它就完了

二项分布(np.random.binomial),搞它就完了!

首先我们的搞清楚伯努利分布和二项分布,我们先找个例子,选西瓜,待我细细道来。

伯努利分布

选一个西瓜,选到好瓜的概率为,选到坏瓜的概率为1-p。这个就是伯努利分布,而选一次西瓜就是伯努利试验。

n重伯努利试验

简单地说,就是把伯努利试验重复n次,也就是你选了几次西瓜。

二项分布

n重伯努利试验「成功」次数的离散概率分布,这里的「成功」假设是选到好瓜。举个例子:选西瓜n次(n重伯努利试验),成功次数(选到好瓜的个数)为k次的概率就是「一个」二项分布概率。二项分布就是选西瓜n次,成功0次,1次,2次…n次(选到好瓜0个,1个,2个…n个),这个情况下的一堆概率。

可以看到,如果你做一次实验(1重伯努利试验),这个时候就变成了伯努利分布。当n趋于无穷时,二项分布趋近于正态分布。 独立的伯努利试验,如果事件X服从二项式分布,则可以表示为X~B(n,p),则期望E(X)=np,方差D(X)=np(1-p)。

接着我们的选西瓜,每次选西瓜中只有两种可能的结果,事件发生与否的概率在每一次独立实验中都保持不变。二项式分布公式如下:

P(X=k)=C_n^kp^k(1-p)^{
    
    n-k}

n表示选西瓜的次数,k是选到好西瓜的次数,p的选到好瓜的概率。

numpy.random.RandomState.binomial(n, p, size=2000)

表示对一个二项分布进行采样,size表示采样的次数,这里为2000,函数的返回值表示n中成功的次数

假设我们选一次选9(n=9)个西瓜,选到好瓜的概率为0.1(p=0.1),那么都选到坏瓜的概率?手动计算的化,可以知道成功的概率为0.1,那么失败的概率为0.9,所以可以根据二项式公式计算

P(X=0)=C_9^0p^0(1-p)^{
    
    n-0}=0.3874

计算可知都选到坏瓜的概率为0.3874,因为np.random.binomial()进行的是采样工作,为了逼近这一概率,我们需要进行的是采用统计的方法进行对概率值的逼近:

import numpy as np
sum(np.random.binomial(9,.1,size=20000)==0)/20000   
输出:
0.38905

这里进行了20000次采样,计算的概率与真实值很近。
np.random.binomial函数返回的其实是一个ndarray,ndarray每个元素代表相应的一次采样实验
(一次实验进行n次)中成功的次数,明白了这一点,就很好理解了:

比如,我们进行10次抽样,输出取到坏瓜的次数

a=np.random.binomial(9,.1,size=10)
print(a)  
输出:
[0 2 0 2 3 0 4 1 2 2]

print(a==0) 
输出布尔值:
[False  True  True  True False False  True False False False]

sum求和对十次抽样中失败的次数和除以总次数
sum(a==0)/10  
输出:
0.6
说明采样较少,准确度不高,因此需要较高的采样样本。

为了理解深刻,我们再看一个例子吧!

#投掷两枚硬币,作为一次伯努利事件,n=2,正面的概率为0.5,进行采样,求其概率。

两枚都是正面
sum(np.random.binomial(2,.5, size=20000)==2)/20000  
输出:
0.25055

其中一个为反面
sum(np.random.binomial(2,.5,  size=20000)==1)/20000 
输出:
0.4979

两个都是反面 
sum(np.random.binomial(2,.5, size=20000)==0)/20000  
输出:
0.25315

今天就讲到这里,有疑问欢迎质疑!

猜你喜欢

转载自blog.csdn.net/weixin_48266700/article/details/123678993
今日推荐