• Python计算二项分布教程


    二项实验需满足下列性质:

    • 实验有n个重复实验组成
    • 每个实验仅有两种结果
    • 成功的概率用p表示,且每次实验概率都相同
    • 每次实验都是独立的

    最常用二项实验为抛硬币实验。假设我们抛10次,这十次实验有下列属性:

    • 实验有10个重复实验组成
    • 每个实验有两种可能结果——正面或负面
    • 正面的概率为p,每次实验的概率都一样
    • 每次实验是独立的——上次实验的结果不影响后面的结果

    如果随机变量服从二项分布,那么概率x=k(成功的次数)公式如下:

    P(X=k) = n C k ∗ p k ∗ ( 1 − p ) n − k {_nC_k * p^k * (1-p)^{n-k}} nCkpk(1p)nk

    参数说明:

    • n: 实验次数

    • k: 成功次数

    • p: 实验成功的概率

    • n C k {_nC_k} nCk: n次实验获得k次成功

    生成二项分布

    可以使用numpy包中random.binomial函数生成服从二项分布的数组:

    from numpy import random
    
    # 生成10个值服从正太分布
    random.binomial(n=10, p=.25, size=10)
    
    # array([5, 2, 1, 3, 3, 3, 2, 2, 1, 4])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数组中的每个元素表示:给定成功概率为.25,进行10次实验成功的次数。

    计算二项分布的概率

    可以使用scipy库中的binom函数回答下列几个问题。

    投篮成功概率为.6, 投球12次,有10次成功的概率

    from scipy.stats import binom
    
    # 计算二项分布概率
    binom.pmf(k=10, n=12, p=0.6)
    
    # 0.0639
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    正好有10次成功的概率为0.0639

    抛5次硬币,有2次或更少为正面的概率

    from scipy.stats import binom
    
    # 计算累积概率
    binom.cdf(k=2, n=5, p=0.5)
    
    # 0.5
    
    # 计算二项分布概率
    binom.pmf(k=2, n=5, p=0.5)
    
    # 0.3125
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    硬币落地为正面2次或更少的概率为.5

    民众对某法律支持率为70%,随机抽取10人,有4~6人支持该法律的概率:

    from scipy.stats import binom
    
    # 计算累积概率
    binom.cdf(k=6, n=10, p=0.7) - binom.cdf(k=3, n=10, p=0.7)
    
    # 0.3398
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结果为有4~6人支持的概率为0.3398

    可视化二项分布

    我们可以通过seaborn、matplotlib库可视化二项分布:

    from numpy import random
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    x = random.binomial(n=10, p=0.5, size=1000)
    
    sns.distplot(x, hist=True, kde=False)
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    x 轴表示10次实验成功的次数,y轴表示1000次实验中成功数值发送的次数。

    在这里插入图片描述

  • 相关阅读:
    第三章《数组与循环》第2节:多维数组
    【AI 测试】分词器
    vmware上的centos8没有网络
    服务器数据恢复-linux+raid+VMwave ESX数据恢复案例
    【LeetCode】20. 有效的括号
    64线LiDAR上速度可达120Hz!一种基于图像表示的快速精确的LiDAR地面分割算法
    Java多线程探究【一线程简介、实现】
    golang学习之路1-环境安装及Helloword
    dnan的好处2
    Java八股文 字节码
  • 原文地址:https://blog.csdn.net/neweastsun/article/details/126501671