📜  Python – 二项分布

📅  最后修改于: 2022-05-13 01:55:32.707000             🧑  作者: Mango

Python – 二项分布

二项分布是一种概率分布,它总结了变量在给定参数集下取两个独立值之一的可能性。该分布是通过执行许多伯努利试验获得的。

假设伯努利试验满足以下每个标准:

  • 必须只有两种可能的结果。
  • 每个结果都有一个固定的发生概率。成功的概率为 p,失败的概率为 1 – p。
  • 每个试验都完全独立于所有其他试验。

二项式随机变量表示在伯努利实验的n次连续独立试验中的成功次数 ( r )。

实现r次成功和nr 次失败的概率为:

p^r * (1-p)^{n-r}

我们可以取得r次成功的方法数量是:
\frac{n!}{(n-r)!\ *\ r!}

因此,概率质量函数(pmf)是实现r次成功和nr次失败的总概率为:
\frac{n!}{(n-r)!\ *\ r!}\ *\ p^r * (1-p)^{n-r}

说明分布的示例:

考虑一个随机实验,投掷一枚有偏差的硬币6次,其中正面朝上的概率为0.6 。如果“领先”被认为是“成功” ,那么二项式分布表将包含每个可能的 r 值的r次成功概率。

r0123456
P(r) 0.004096 0.036864 0.138240 0.2764800.311040  0.1866240.046656

此分布具有等于np的平均值和np(1-p)的方差。

使用Python获取分布:
现在,我们将使用Python分析分布(使用SciPy )并绘制图形(使用Matplotlib )。
所需模块:

  • 科学:
    SciPy是一个开源Python库,用于数学、工程、科学和技术计算。

    安装 :

    pip install scipy
    
  • Matplotlib:
    Matplotlib是一个综合性的Python库,用于绘制静态和交互式图形和可视化。  

    安装 :

    pip install matplotlib
    

scipy.stats模块包含用于统计计算和测试的各种函数。 scipy.stats.binom模块的stats()函数可用于使用np的值计算二项分布。

它返回一个元组,其中包含按该顺序分布的均值和方差。

scipy.stats.binom.pmf()函数用于获取 r、n 和 p 的某个值的概率质量函数。我们可以通过传递 r(0 到 n) 的所有可能值来获得分布。

计算分布表:

方法 :

  • 定义np
  • 定义从 0 到 n 的r值列表。
  • 获取均值方差
  • 对于每个 r,计算pmf并存储在列表中。

代码 :

from scipy.stats import binom
# setting the values
# of n and p
n = 6
p = 0.6
# defining the list of r values
r_values = list(range(n + 1))
# obtaining the mean and variance 
mean, var = binom.stats(n, p)
# list of pmf values
dist = [binom.pmf(r, n, p) for r in r_values ]
# printing the table
print("r\tp(r)")
for i in range(n + 1):
    print(str(r_values[i]) + "\t" + str(dist[i]))
# printing mean and variance
print("mean = "+str(mean))
print("variance = "+str(var))

输出 :

r    p(r)
0    0.004096000000000002
1    0.03686400000000005
2    0.13824000000000003
3    0.2764800000000001
4    0.31104
5    0.18662400000000007
6    0.04665599999999999
mean = 3.5999999999999996
variance = 1.44

代码:使用matplotlib.pyplot.bar()函数绘制图形以绘制垂直条。

from scipy.stats import binom
import matplotlib.pyplot as plt
# setting the values
# of n and p
n = 6
p = 0.6
# defining list of r values
r_values = list(range(n + 1))
# list of pmf values
dist = [binom.pmf(r, n, p) for r in r_values ]
# plotting the graph 
plt.bar(r_values, dist)
plt.show()

输出 :



当成功和失败的可能性相同时,二项分布是正态分布。因此,将p的值更改为0.5 ,我们得到此图,它与正态分布图相同: