【问题标题】:How to get the probability of each possible outcome for a multinomial case?如何获得多项情况下每个可能结果的概率?
【发布时间】:2021-12-15 20:26:12
【问题描述】:

使用stats.binom.pmf(np.arange(0,11),10,0.5),我可以得到一个数字数组,代表一个事件在 10 次中发生 n 次(0 到 10)的概率,假设单次发生的概率为 0.5,如下所示:

array([0.00097656, 0.00976563, 0.04394531, 0.1171875 , 0.20507813,
       0.24609375, 0.20507813, 0.1171875 , 0.04394531, 0.00976563,
       0.00097656])

现在我想为多项式情况获得类似的输出。

说我掷骰子 3 次,如何使用现有的包得到这样一个表示总点数(3 到 18)概率的概率数组?

【问题讨论】:

  • 你可以使用数学和几行代码来做到这一点。
  • 让我改写 Julian:scipy 和 numpy 不提供此功能(将多项结果视为苹果和器官,而不是点),但它可以通过数学轻松解决。

标签: python scipy probability multinomial


【解决方案1】:

为了说明我的评论,这里是函数:

def discrete_uniform_sum_pmf(a, b, n):
    du_pmf = {i: 1/(b-a+1) for i in range(a, b+1)}
    du_sum_pmf = {0: 1}

    for i in range(n):
        new_sum_pmf = defaultdict(float)
        for prev_sum, dice in product(du_sum_pmf, du_pmf):
            new_sum_pmf[prev_sum + dice] += du_sum_pmf[prev_sum] * du_pmf[dice]
        du_sum_pmf = new_sum_pmf

    return du_sum_pmf

使用 numpy 会简单得多,并且有很大的改进空间(使用 CDF 来避免嵌套循环、利用对称性等)——但应该足以说明这个想法。

discrete_uniform_sum_pmf(1, 6, 3) 的输出与 Arne 显示的相同

【讨论】:

    【解决方案2】:

    诀窍是考虑适当的拉普拉斯空间,其中每个事件具有相同的概率。在三个骰子的情况下,这意味着将元组 (1, 1, 1), (1, 1, 2), ... (6, 6, 6) 视为基本事件。因此,您可以计算这些元组中有多少导致每个总和从 3 到 18,然后将这些数字除以元组的总数以获得概率:

    from itertools import product
    from collections import defaultdict
    
    counts = defaultdict(int)
    for dice in product(range(1, 7), repeat=3):
        counts[sum(dice)] += 1 
        
    probabilities = {n: counts[n] / 6 ** 3 for n in range(3, 19)}
    print(probabilities)
    
    {3: 0.004629629629629629,
     4: 0.013888888888888888,
     5: 0.027777777777777776,
     6: 0.046296296296296294,
     7: 0.06944444444444445,
     8: 0.09722222222222222,
     9: 0.11574074074074074,
     10: 0.125,
     11: 0.125,
     12: 0.11574074074074074,
     13: 0.09722222222222222,
     14: 0.06944444444444445,
     15: 0.046296296296296294,
     16: 0.027777777777777776,
     17: 0.013888888888888888,
     18: 0.004629629629629629}
    

    【讨论】:

    • 这种方法(计算所有结果)适用于 3 个骰子,但随着掷骰次数的增加,复杂性会呈指数增长。这可以使用循环公式在线性时间内计算,而不是从 n-1 卷的 PMF 中得到 n 卷的 PMF
    猜你喜欢
    • 2021-04-19
    • 2017-02-05
    • 2018-06-21
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-07-31
    • 1970-01-01
    相关资源
    最近更新 更多