【发布时间】:2011-03-01 22:47:57
【问题描述】:
从一个 n 维单位单纯形中均匀随机抽样是说你想要 n 个随机数这样的奇特方式
- 它们都是非负的,
- 它们总和为 1,并且
- n 个非负数总和为 1 的每个可能向量的可能性均等。
在 n=2 的情况下,您希望从位于正象限的线 x+y=1(即 y=1-x)的线段中均匀采样。 在 n=3 的情况下,您从平面 x+y+z=1 的三角形部分进行采样,该部分位于 R3 的正八分圆中:
(图片来自http://en.wikipedia.org/wiki/Simplex。)
请注意,选择 n 个统一的随机数,然后将它们归一化以使它们总和为 1 是行不通的。你最终会偏向不太极端的数字。
类似地,选取 n-1 个均匀随机数,然后将第 n 个减去它们的总和后取第 n 个,也会引入偏差。
Wikipedia 提供了两种算法来正确执行此操作:http://en.wikipedia.org/wiki/Simplex#Random_sampling (虽然第二个目前声称仅在实践中是正确的,而不是在理论上。我希望在我更好地理解这一点时对其进行清理或澄清。我最初陷入了“警告:某某纸声称该维基百科页面上的以下内容是错误的”,其他人将其变成了“仅在实践中有效”的警告。)
最后,问题: 您认为 Mathematica 中单纯形采样的最佳实现方式是什么(最好通过经验确认它是正确的)?
相关问题
【问题讨论】:
-
似乎有几种方法可以正常工作 - 唯一真正的区别在于速度和可读性。除了“最佳”之外,您的标准是什么?
-
速度和可读性是很好的标准!简洁可能是另一个。如果您的实现有任何用途,请继续并将其作为答案发布。
-
我认为维基百科的警告有点虚假;引用的论文的作者担心这个问题的离散化版本的完美一致性。从数学的角度来看,所描述的第二种算法是完全正确的,如果您准备将“来自 [0, 1] 的随机浮点数”视为“随机实数”的足够好的近似值,那么在实践中应该可以很好地工作[0, 1]'中的数字。
-
采样链接失效
标签: math random wolfram-mathematica