采样方法之拒绝采样

背景

在基于求逆分布的采样方法中,不免遇到不能求逆的复杂累计分布函数,此时可以借助于拒绝采样方法采样。

原理

拒绝采样的介绍通常从 π \pi π的计算或者圆的面积的计算开始。这里我们求面积为例。
已知:边长为 1 1 1的矩形,在不知道 π \pi π的值的情况下,求其内切圆面积。
采样方法求解:记 n = 0 n=0 n=0; 在该矩形内均匀采样 ( x , y ) (x,y) (x,y)数据对,如果 x 2 + y 2 ≤ 1 x^2+y^2\le1 x2+y21, 则 n = n + 1 n=n+1 n=n+1. 采样 M M M次后,面积 S S S计算:
S = n / M S=n/M S=n/M.
采样方法之拒绝采样_第1张图片
对于不能求逆的概率分布的采样,我们采用类似的思路。
假设待采样的分布为 p ( z ) p(z) p(z), 甚至可以可以有更复杂的情况,我们仅仅知道分布 p ( z ) p(z) p(z)的未归一化版本 p ~ ( z ) \widetilde{p}(z) p (z):
p ( z ) = p ~ ( z ) Z p p(z)=\frac{\widetilde{p}(z)}{Z_p} p(z)=Zpp (z), Z p Z_p Zp 为归一化系数,很难计算,未知。(实际上,在统计学习中,经常遇到将一些函数 f ( z ) f(z) f(z)归一化,当成概率对待,但是由于种种原因,不能得到归一化系数。)
在当前情况下,我们采样符合 p ~ ( z ) \widetilde p(z) p (z)的样本集合。
此时需要选择一个容易采样的分布 q ( z ) q(z) q(z),或者直接采样,或者需要求逆采样方法。 q ( z ) q(z) q(z) 通常被称为proposal distribution。最好 q ( z ) q(z) q(z) p ~ ( z ) \widetilde p(z) p (z)有相似的形状。然后选择合适 k k k,使得 k q ( z ) ≥ p ~ ( z ) kq(z)\ge \widetilde{p}(z) kq(z)p (z)对任意的 z z z 成立。为了提高采样效率, k q ( z ) kq(z) kq(z) 最好刚好覆盖 p ~ ( z ) \widetilde{p}(z) p (z)就好,如下图:
采样方法之拒绝采样_第2张图片
然后我们可以采样过程:

  1. q ( z ) q(z) q(z)中采样 z 0 z_0 z0(实际是先在横轴定义域均匀分布中采样 z 0 ′ z'_0 z0,经过逆变换得到符合分布 q ( z ) q(z) q(z) z 0 z_0 z0);
  2. 从均匀分布 [ 0 , k q ( z 0 ) ] [0, kq(z_0)] [0,kq(z0)] 中采样 u 0 u_0 u0;
  3. 如果 u 0 < p ~ ( z ) u_0<\widetilde {p}(z) u0<p (z)接受样本 z 0 z_0 z0, 否则拒绝。
    这样经过 m m m次采样后(接受 n n n个样本),得到的样本集 { z i } i = 1 n \{z_i\}_{i=1}^{n} { zi}i=1n符合分布p(z).

证明 { z i } i = 1 n \{z_i\}_{i=1}^{n} { zi}i=1n符合分布p(z):
http://blog.quantitations.com/inference/2012/11/24/rejection-sampling-proof

任意一次采样的接受概率计算如下(对所有可能被接受的 z z z的概率积分):
p ( a c c e p t ) = P ( z ∈ q ( z ) 且 u 0 < p ~ ( z ) ) p(accept)=P(z\in q(z) 且 u_0<\widetilde {p}(z)) p(accept)=P(zq(z)u0<p (z))
p ( a c c e p t ) = ∫ p ~ ( z ) k q ( z ) q ( z ) d z = 1 k ∫ p ~ ( z ) d z p(accept)=\int \frac{\widetilde{p}(z)}{kq(z)}q(z)dz=\frac{1}{k}\int\widetilde{p}(z)dz p(accept)=kq(z)p (z)q(z)dz=k1p (z)dz
∫ k q ( z ) d z = k \int kq(z)dz=k kq(z)dz=k 为蓝线和x轴之间的面积;
∫ p ~ ( z ) d z \int\widetilde{p}(z)dz p (z)dz 红线与x轴之间区域面积;

在高维的情况下,接受-拒绝采样会出现两个问题,第一是合适的q(x)q(x)分布比较难以找到,第二是很难确定一个合理的 k 值。这两个问题会导致拒绝率很高,无用计算增加。

[1]https://blog.csdn.net/jteng/article/details/54344766
[2]https://blog.csdn.net/u010159842/article/details/78959515

你可能感兴趣的:(机器学习,统计学习,采样方法)