二项分布(np.random.binomial)

  1. 二项分布(binomial distribution)公式:

    n为实验总次数,k是成功的次数,p是成功概率

        P(X=k)=C_n^kp^k(1-p)^{n-k}
    
  2. numpy给出的api是:

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

    表示对一个二项分布进行采样(size表示采样的次数,draw samples from a binomial distribution.),参数中的n,p分别对应于公式中的n,p,函数的返回值表示n中成功(success)的次数。

  3. 例子

    可能说起来比较抽象,我们以一个具体的实例进行阐释:

    说野外正在进行9(n=9)口石油勘探井的发掘工作,每一口井能够开发出油
    的概率是0.1(p=0.1)。请问,最终所有的勘探井都勘探失败的概率?
    

    如果手动计算的话,自然简单运用中学概率知识便可秒答

    P(X=0)=C_9^0p^0(1-p)^{n-0}\approx0.3874
    

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

    >>> n, p = 9, .1
    # 采样2000次,返回值表示2000次采样中n(即9)中成功的次数
    # 这里对成功次数为0的实验进行个数统计加和
    >>> sum(np.random.binomial(n, p, size=20000)==0)/20000.
    0.3833
    

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

    n, p = 9, .1
    print(np.random.binomial(n, p, size=20))
    [1 2 1 1 0 4 3 1 0 0 0 0 1 2 2 1 0 1 0 0]
    
  4. 模拟投硬币

    # 两枚都是正面
    >>> n, p = 2, .5            
    >>> sum(np.random.binomial(n, p, size=20000)==2)/20000.
    0.24605        # 和我们的精确概率值相接近
    
    # 其中一个为反面
    >>> sum(np.random.binomial(n, p, size=20000)==1)/20000.
    0.5075
    
    # 两个都是反面 
    >>> n, p = 2, .5
    >>> sum(np.random.binomial(n, p, size=20000)==0)/20000.
    0.257
    

你可能感兴趣的:(二项分布(np.random.binomial))