假设我们正在使用拒绝抽样,并且我们想从分布中抽样,比如。为了计算接受概率,我们使用以下比率:
那么我们为什么要使用拒绝抽样呢?为什么我们不直接从采样?换句话说,是什么让分布难以采样?
假设我们正在使用拒绝抽样,并且我们想从分布中抽样,比如。为了计算接受概率,我们使用以下比率:
那么我们为什么要使用拒绝抽样呢?为什么我们不直接从采样?换句话说,是什么让分布难以采样?
因此,对于随机生成的值 x,我们仍然使用 p 的分布。
计算密度与从分布中抽样随机变量不同,是密度。
为什么我们不直接从 p 中采样?
我不确定您所说的“直接采样”是什么意思。一般来说,您如何建议直接从中抽样?
考虑以下密度,例如: (我记得,可以用贝塞尔函数计算,但它的值并不重要,对吧现在)。如果您足够聪明,也许您可以弄清楚如何从“直接”(无论您的意思是什么)中进行采样...但是就个人而言,我通常不是那么聪明-通常我只会使用 (类似的东西的拒绝抽样的变体。
[在这个例子中拒绝抽样的另一个好处是我什至不需要知道来使用它;它影响拒绝率,但不影响算法的进度。有一些简单的提案密度可以很好地适用于这种情况。]
换句话说,是什么让分布难以采样?
这取决于你有什么工具来生成随机变量。如果你知道很多工具,一些发行版并不难。如果你只有几个工具,更多的东西变得难以采样。
(例如,如果您只知道如何使用概率积分变换生成随机数,那么任何其逆 cdf 难以评估的密度都将难以从中采样。任何其逆 cdf 评估成本高昂的分布都将是昂贵的从中取样。
例如,您可能想考虑的任何一个值进行少量观察)。它在 0 处有一些点质量,但可以处理。然而,至少可以说,连续部分的逆 cdf 是有问题的。甚至密度也涉及无限和(尽管如此,它可以被评估,尽管计算起来很昂贵)。拒绝抽样——通过一些调整将功能评估减少到最低限度——在这里是可能的。逆 cdf?我不知道它是否实用,即使它是可能的。如果你真的很聪明,你可能会想出一种使用逆 cdf 的方法——我认为这可能超出了我的范围,但即使你这样做了,也需要一段时间才能得到你的数字。)
拒绝抽样是该集合中非常重要的工具(或者更确切地说,拒绝抽样本身就是一类工具,因为这个想法有许多巧妙的变化),也许是最重要的工具之一。它的变体被广泛使用。
从分布中抽样意味着获得一个概率与该分布的 pdf 匹配的样本。在拒绝抽样中,我们抽取随机样本并选择这些样本的 pdf 不超过给定分布的 pdf。这是拒绝标准。这样我们就有了适当的样本,并且通过在这个标准下获得大量随机样本将代表分布的总体情况。
那么为什么我们要准确地使用拒绝抽样呢?
使用拒绝抽样有几个原因。从历史上看,计算是随机变量生成的瓶颈。计算、和 ) 等函数非常耗时。一些拒绝技术可以完全避免这些函数的计算。
目前(截至 2022 年),一个常见原因是从分布(例如 ( ) 本身进行采样很困难,而从中采样更容易。我们将中的采样称为逆 CDF 方法iCDF方法为简洁起见。这个原因可能不太可能随时间变化。
使用拒绝抽样的另一个原因是效率。例如,iCDF方法可以是,其中是分布的参数,而拒绝方法可能是,所以理论上无论如何- 在采样库中可以默认使用拒绝方法。我们将它用作默认值,因为您不会事先知道库的用户对于特定代码位需要在实践中,您通常会在中使用拒绝采样区域效率更高,而iCDF后者效率更高。
为什么我们不直接从采样?
有时可能无法使用iCDF方法直接采样(这就是我对“直接”一词的解释)。一个例子是 Kolmogorov-Smirnov 分布。据我所知,对这个分布进行抽样的唯一方法要么使用数值近似,要么使用一种称为系列方法的拒绝抽样的变体。这是一个无法直接采样的示例,除非您想接受数值权衡,这会增加库维护和实现开销。另请参阅我对第一个问题的回答中关于效率的评论,这也适用于这个问题,这是使用拒绝抽样的另一个原因。
此外,拒绝抽样还有许多变体,如 Vaduva 方法、系列方法和均匀比率方法。您可以在 Luc Devroye 的精彩著作Non-uniform Random Variate Generation 中了解它们中的每一个。
换句话说,是什么让分布难以采样?
这可能是一个太宽泛的问题,无法回答。套用托尔斯泰的话,
所有简单的发行版都是相似的,但每个困难的发行版都以自己的方式不愉快。
使分布易于采样的是轻尾和有限模式。轻尾和有限模式意味着拒绝抽样可以与适当的支配分布一起使用。识别简单的形式可能需要各种技巧和技术,但它们似乎都遵循这种模式。