• 二项分布


    1 二项分布N,P对分布的影响

    # --*-- coding:utf-8 --*--
    import distribution
    import matplotlib.pyplot as plt
    from matplotlib.ticker import MultipleLocator
    # 二项分布举例:将一个硬币抛三次,用随机变量X记录在三次抛中正面向上的次数,将X的所有可能取值对应的概率算出来
    
    
    x = range(0, 101)
    P_1 = 0.2
    p_1 = [distribution.binomial(len(x) - 1, P_1, i) for i in x]
    P_2 = 0.8
    p_2 = [distribution.binomial(len(x) - 1, P_2, i) for i in x]
    x_3 = range(0, 201)
    p_3 = [distribution.binomial(len(x_3), P_1, i) for i in x_3]
    
    width = 1
    
    # 不同的P
    fig = plt.figure()
    ax1 = fig.add_subplot(121)
    ax1.xaxis.set_major_locator(MultipleLocator(10))
    ax1.bar([i - float(width) / 2 for i in x], p_1, width=width, label='N=%s P=%s' % (len(x) - 1, P_1))
    ax1.bar([i - float(width) / 2 for i in x], p_2, width=width, color='r', label='N=%s P=%s' % (len(x) - 1, P_2))
    ax1.plot(x, p_1, x, p_2, color='r')
    ax1.set_title('binomial distribution')
    ax1.legend()
    ax1.grid()
    
    # 不同的N
    ax2 = fig.add_subplot(122)
    ax2.xaxis.set_major_locator(MultipleLocator(10))
    ax2.bar([i - float(width) / 2 for i in x], p_1, width=width, label='N=%s P=%s' % (len(x) - 1, P_1))
    ax2.bar([i - float(width) / 2 for i in x_3], p_3, width=width, color='r', label='N=%s P=%s' % (len(x_3) - 1, P_1))
    ax2.plot(x, p_1, x_3, p_3, color='r')
    ax2.set_title('binomial distribution')
    ax2.legend()
    ax2.grid()
    
    plt.show()



    distribution.py
    # --*-- coding:utf --*--
    import math
    
    
    def combination(n, k):
        """
        n choose k
        """
        return math.factorial(n) / (math.factorial(k) * math.factorial(n - k))
    
    
    def Binom(n, k, d={}):
        """Compute the binomial coefficient "n choose k".
    
        Args:
          n: number of trials
          k: number of successes
          d: map from (n,k) tuples to cached results
    
        Returns:
          int
        """
        if k == 0:
            return 1
        if n == 0:
            return 0
    
        try:
            return d[n, k]
        except KeyError:
            res = Binom(n-1, k) + Binom(n-1, k-1)
            d[n, k] = res
            return res
    
    
    def binomial(n, p, x):
        if x > n:
            return None
        # return combination(n, x) * (p ** x) * ((1 - p) ** (n - x))
        return Binom(n, x) * (p ** x) * ((1 - p) ** (n - x))
    2,二巷分布 4重伯努利实验 扔硬币
    3,二项分布 n重伯努利试验 射击

  • 相关阅读:
    JavaScript实现网页换肤
    JavaScript实现鼠标效果
    JavaScript实现复选框的全选、不选、反选
    处理器解决物联网和人工智能的融合
    用小神经网络和光谱仪优化关键词识别
    电阻存储器为edge-AI提供了仿生架构
    为什么edge AI是一个无需大脑的人
    满足实时人工智能的计算需求
    传感器可以让智能手机测量生命体征
    接触追踪解决方案建立在UWB而不是蓝牙上
  • 原文地址:https://www.cnblogs.com/i80386/p/3706246.html
Copyright © 2020-2023  润新知