采样/重要性重采样 - 为什么要重采样?

机器算法验证 蒙特卡洛 重采样 重要性抽样
2022-03-14 05:50:53

我试图理解 SIR 算法。为此,最好查看一些现有的 r 代码(见下文),取自http://hedibert.org/wp-content/uploads/2013/12/example-iii.R.txt

# SIR: Uniform proposal
N      = 10000
m      = 2000
draw1  = runif(N,-10,10)
w      = dnorm(draw1)/0.05
ind    = sample(1:N,size=m,replace=TRUE,prob=w)
draws1 = draw1[ind]
length(unique(draws1))/m

我真的不明白计算 w 后采取的任何步骤。为什么不直接取 w 的平均值来近似积分呢?为什么要重采样?另外,最后一步是什么:为什么要计算你有多少独特的平局?

1个回答

SIR 使用了两个想法。第一个想法是重要性抽样主要思想是您从一个概率分布中得出(在您的情况下,它是统一的),以便获取有关另一个的信息。为此,您可以从一个分布中抽取数据,然后对样本进行加权。通常,您会尝试获取有关棘手分布的信息,但由于这是一个教程,因此您会尝试使用制服中的样本获取有关正态分布的信息。

假设您采样在您的代码中,这些被称为. 然后,您可以使用未标准化的权重它们进行加权。您可以使用这些粒子/加权样本来近似期望值:X1,,XNiidUniform(10,10)draw1wi=pnormal(Xi)/puniform(Xi)

Enormal[h(X)]i=1Nw~ih(xi),
其中是归一化的权重。w~i=wi/jwj

然而,这些样本(没有权重)不是按照正态分布分布的。如果您想要(渐近)正态分布的样本,则需要从加权样本中重新采样。权重较高的样本更有可能被挑选出来。但是最后,所有重新采样的东西都将具有相同的权重,因为您正在使用替换进行采样。

假设你绘制索引 您的代码调用这些. 他们选择的样本大致呈正态分布。您可以使用类似的命令凭经验验证这一点它看起来像一个钟形曲线。从数学上讲,您可以将这些样本写为 (而不是。)

I1,,ImiidMultinomial(1,w~1,,w~N).
indhist(draws1)
XI1,XI2,,XIN
X1,,XN

现在,您可能在此处绘制了重复项。即使您可能有两个 s,它们都被平等对待。每个重新采样的位都具有相同的权重。它们每个都应该是3.61/m

最后,正如我在上面的评论中提到的,这个例子在技术上是不正确的。提案/工具/重要性分布的要求之一是它应该能够在任何地方抽取样本以支持您的目标分布。换句话说,该提案应该“主导”您的目标。然而,这个提议并不满足这个标准,因为即使你选择了一个覆盖了法线目标大部分支持的制服(也许它以法线模式为中心并且非常宽),它仍然会留下一些未覆盖的尾部区域. 这在实践中可能可以忽略不计,或者它不是逼近某些特定期望的要求,但值得一提。