【问题标题】:Discrete probability distribution with a given maximum具有给定最大值的离散概率分布
【发布时间】:2015-07-03 23:57:51
【问题描述】:

我必须生成具有给定最大值的n 元素的随机离散概率分布。

我知道如何创建一个经典的,但我不知道如何生成尊重max(distribution) = pn 元素的随机离散概率分布。我的意思是分布的最高概率必须是p in [0;1[

有什么想法吗?

【问题讨论】:

  • random函数返回区间[0; 1]。您可以使用公式values[i] = expectedValue + 2 * p * (random() - 1);
  • max(distribution) = p 是什么意思?对于离散概率分布,您有两组数字——出现的数字(例如掷骰子时的 1、2、3、4、5、6)和这些数字出现的概率(例如数字 1/6)。目前尚不清楚您的意图。
  • @MarkShevchenko 您的评论中的expectedValue是什么? p真的在分布吗?
  • @JohnColeman by max(distribution)=p 我的意思是分布中的最高概率必须等于p in [0;1[
  • @elnabo -- 这当然是微不足道的(让 p(0) = p,选择足够大的 n 使得 (1-p)/(n-1)

标签: probability


【解决方案1】:

您可以使用命中和未命中方法(通常在概率模拟中用于随机选择满足某些约束的元素)。性能是可以接受的除非 np 太接近 1。这是一个 Python 实现,应该很容易翻译成其他语言:

from random import random

def makeDist(n,p):
    #assumes p*n > 1
    miss = True
    while miss:
        x = [p]
        rest = [random() for i in range(1,n)]
        total = sum(rest)
        rest = [x*(1-p)/total for x in rest]
        if all(x < p for x in rest):
            x.extend(rest)
            miss = False #we have a hit!
    return x

典型输出:

>>> dist = makeDist(6,0.2)
>>> dist
[0.2, 0.08986510724051082, 0.18690143846768711, 0.19758176720598397, 0.19299989610231708, 0.13265179098350102]
>>> max(dist)
0.2
>>> sum(dist)
1.0
>>> makeDist(3,0.35)
[0.35, 0.31154704906869274, 0.33845295093130723]
>>> 

【讨论】:

  • 我可能误解了您关于元素数量限制的评论。分布中的元素数量固定为n
猜你喜欢
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 2012-04-14
相关资源
最近更新 更多