本文介绍了重要性采样(Importance Sampling)并给出了示例。
本文篇幅较长,分为以下几个部分:
- 重要性采样是什么
- 重要性采样的应用示例
- 不同的分布 Q Q Q对结果有影响吗?
- 小结和附录代码
Part1:重要性采样是什么
前文《R-概率统计与模拟(三)变换均匀分布对特定分布进行抽样》和《R-概率统计与模拟(四)拒绝抽样》分别介绍了两种方法,可以根据已知的p.d.f.进行采样(抽样),使得采样得到的点符合目标分布。“重要性抽样”(Importance Sampling)不同于上述两种方法,其主要用途是通过采样计算数学期望。 而这与积分的计算有关。
通过大量随机采样计算积分
在建模过程中,我们经常要计算某个函数的期望:假设变量 X X X符合某个分布 P P P,记为 X ∼ P X \sim P X∼P,其 p.d.f. \text{p.d.f.} p.d.f.记为 p ( x ) p(x) p(x)。我们想要计算某个函数 f f f在分布 P P P下的期望 E [ f ( X ) ] E[f(X)] E[f(X)]。根据期望的数学定义,我们知道:
E X ∼ P [ f ( X ) ] = ∫ x f ( x ) p ( x ) d x E_{X \sim P}[f(X)] = \int_x f(x)p(x) \, \text{d}x EX∼P[f(X)]=∫xf(x)p(x)dx
在实际操作中,往往上面积分的解析解很难计算,所以可以通过大量采样的方法进行近似计算:假设根据分布 P P P进行大量随机采样,样本量记为 N N N,样本点记为 { x ^ 1 , x ^ 2 , … , x ^ N } \{\hat{x}_1, \hat{x}_2, \ldots, \hat{x}_N \} {
x^1,x^2,…,x^N},那么当 N N N足够大时,
E X ∼ P [ f ( X ) ] = ∫ x f ( x ) p ( x ) d x ≈ 1 N ∑ i = 1 N f ( x ^ i ) E_{X \sim P}[f(X)] = \int_x f(x)p(x) \, \text{d}x \approx \frac{1}{N} \sum_{i=1}^{N} f(\hat{x}_i) EX∼P[f(X)]=∫xf(x)p(x)dx≈N1i=1∑Nf(x^i)
所以关键在于如何对分布 P P P进行采样。当然我们可以根据前文介绍的“变换均匀分布进行抽样”或者“拒绝抽样”的方法进行采样。但是,如前文所说,这两种方法都有局限。当遇到一个复杂的 p.d.f. \text{p.d.f.} p.d.f.时,两种方法可能都不适用。
引入另一个分布 Q Q Q
当无法直接对分布 P P P进行采样从而难以近似计算上述积分时,我们可以对上面的积分做一个变换(即“重要性采样”的关键部分),让计算变得简单可行:
我们选取另一个容易进行抽样的分布 Q Q Q,其 p.d.f. \text{p.d.f.} p.d.f.记为 q ( x ) q(x) q(x)。上述积分变换为:
E X ∼ P [ f ( X ) ] = ∫ x f ( x ) p ( x ) d x = ∫ x f ( x ) p ( x ) q ( x ) q ( x ) dx E_{X \sim P}[f(X)] = \int_x f(x)p(x) \, \text{d}x = \int_x f(x) \frac{p(x)}{q(x)} q(x) \, \text{dx} EX∼P[f(X)]=∫xf(x)p(x)dx=∫xf(x)q(x)p(x)q(x)dx
然后我们根据分布 Q Q Q进行大量随机采样,样本量记为 N N N,样本点记为 { x 1 , x 2 , … , x N } \{x_1, x_2, \ldots, x_N \} {
x1,x2