接受拒绝抽样法大多应用在原始概率分布
p
(
x
)
p(x)
p(x) 复杂,难以进行直接抽样时,我们选取另一个易于直接抽样的分布
q
(
x
)
q(x)
q(x),并且
q
(
x
)
q(x)
q(x) 满足:
c
⋅
q
(
x
)
≥
p
(
x
)
,
c
>
0
c\cdot q(x)\geq p(x),~c>0
c⋅q(x)≥p(x),c>0这里的分布
q
(
x
)
q(x)
q(x) 被称为建议分布,按照
q
(
x
)
q(x)
q(x) 进行直接抽样的结果是
x
∗
x^*
x∗,再对均匀分布
U
(
0
,
1
)
U(0,1)
U(0,1) 进行直接抽样得到
u
u
u,我们将
u
u
u 与
p
(
x
∗
)
c
⋅
q
(
x
∗
)
\cfrac{p(x^*)}{c\cdot q(x^*)}
c⋅q(x∗)p(x∗) 进行比较,当且仅当
u
≤
p
(
x
∗
)
c
⋅
q
(
x
∗
)
u\leq\cfrac{p(x^*)}{c\cdot q(x^*)}
u≤c⋅q(x∗)p(x∗) 时接受样本
x
∗
x^*
x∗,否则拒绝它。
直观上来看,接受拒绝采样法在样本落到
p
(
x
)
p(x)
p(x) 范围内时就接受,而落到
p
(
x
)
p(x)
p(x) 范围外时就拒绝,其实质是按照
p
(
x
)
p(x)
p(x) 的涵盖面积占
c
⋅
q
(
x
)
c\cdot q(x)
c⋅q(x) 的涵盖面积之比来进行抽样的。
【证明】我们记按照
q
(
x
)
q(x)
q(x) 进行采用的样本被接受为事件
A
A
A,将原分布记为
π
(
x
)
\pi(x)
π(x) 以示区分,那么需要证明
p
(
x
∣
A
)
=
π
(
x
)
.
p(x|A)=\pi(x).
p(x∣A)=π(x). 基于贝叶斯公式得到:
p
(
x
∣
A
)
=
p
(
x
,
A
)
∫
X
p
(
x
,
A
)
d
x
p(x|A)=\frac{p(x,A)}{\int_Xp(x,A)dx}
p(x∣A)=∫Xp(x,A)dxp(x,A)其中联合概率分布
p
(
x
,
A
)
p(x,A)
p(x,A) 可以写为:
p
(
A
∣
x
)
⋅
p
(
x
)
p(A|x)\cdot p(x)
p(A∣x)⋅p(x)并且其中的先验分布
p
(
x
)
p(x)
p(x) 就是我们用于直接采样的建议分布
q
(
x
)
q(x)
q(x),而样本
x
x
x 是根据独立的均匀分布
U
(
0
,
1
)
U(0,1)
U(0,1) 来决定的,因此:
p
(
A
∣
x
)
=
∫
U
p
(
A
∣
x
,
u
)
p
(
u
∣
x
)
d
u
=
∫
U
p
(
A
∣
x
,
u
)
p
(
u
)
d
u
p(A|x)=\int_Up(A|x,u)p(u|x)du=\int_Up(A|x,u)p(u)du
p(A∣x)=∫Up(A∣x,u)p(u∣x)du=∫Up(A∣x,u)p(u)du根据接受拒绝采样法的接受原则我们知道,当且仅当
u
≤
π
(
x
)
c
⋅
q
(
x
)
u\leq\cfrac{\pi(x)}{c\cdot q(x)}
u≤c⋅q(x)π(x) 时
p
(
A
∣
x
,
u
)
=
1
p(A|x,u)=1
p(A∣x,u)=1,其它情况均为
0
0
0,因此:
p
(
A
∣
x
)
=
∫
0
π
(
x
)
c
⋅
q
(
x
)
p
(
u
)
d
u
=
π
(
x
)
c
⋅
q
(
x
)
p(A|x)=\int_0^{\cfrac{\pi(x)}{c\cdot q(x)}}p(u)du=\frac{\pi(x)}{c\cdot q(x)}
p(A∣x)=∫0c⋅q(x)π(x)p(u)du=c⋅q(x)π(x)上述积分是均匀分布
U
(
0
,
1
)
U(0,1)
U(0,1) 的积分。于是我们得到:
p
(
x
,
A
)
=
p
(
A
∣
x
)
⋅
q
(
x
)
=
π
(
x
)
c
p(x,A)=p(A|x)\cdot q(x)=\frac{\pi(x)}c
p(x,A)=p(A∣x)⋅q(x)=cπ(x)因此:
p
(
A
∣
x
)
=
π
(
x
)
/
c
∫
X
(
π
(
x
)
/
c
)
d
x
=
π
(
x
)
∫
X
π
(
x
)
d
x
=
π
(
x
)
p(A|x)=\frac{\pi(x)/c}{\int_X\big(\pi(x)/c\big)dx}=\frac{\pi(x)}{\int_X\pi(x)dx}=\pi(x)
p(A∣x)=∫X(π(x)/c)dxπ(x)/c=∫Xπ(x)dxπ(x)=π(x)该式说明我们基于接受拒绝采样法进行采样的分布
p
(
A
∣
x
)
p(A|x)
p(A∣x) 在概率意义上等于原始的采样概率分布
π
(
x
)
.
\pi(x).
π(x).
数学期望估计.
【问题描述】假设有随机变量
x
x
x,取值
x
∈
X
x\in\mathcal X
x∈X,其概率密度函数为
p
(
x
)
p(x)
p(x),
f
(
x
)
f(x)
f(x) 是定义在
X
\mathcal X
X 上的函数,目标是求函数
f
(
x
)
f(x)
f(x) 关于密度函数
p
(
x
)
p(x)
p(x) 的数学期望
E
p
(
x
)
[
f
(
x
)
]
.
E_{p(x)}[f(x)].
Ep(x)[f(x)].
处理该问题的常见做法就是,按照概率分布独立地随机抽取
n
n
n 个样本
{
x
i
∣
i
=
1
,
2
,
⋯
,
n
}
\{x_i|i=1,2,\cdots,n\}
{xi∣i=1,2,⋯,n},之后计算关于函数
f
(
x
)
f(x)
f(x) 的样本均值
f
^
(
n
)
\hat f(n)
f^(n):
f
^
n
=
1
n
∑
i
=
1
n
f
(
x
i
)
\hat f_n=\frac1n\sum_{i=1}^nf(x_i)
f^n=n1i=1∑nf(xi)将其作为数学期望
E
p
(
x
)
[
f
(
x
)
]
E_{p(x)}[f(x)]
Ep(x)[f(x)] 的近似值。依据弱大数定律,也称为辛钦大数定律,当样本容量趋于无穷时,样本均值的极限等于总体数学期望:
lim
n
→
∞
f
^
n
=
E
p
(
x
)
[
f
(
x
)
]
\lim_{n\rightarrow\infin}\hat f_n=E_{p(x)}[f(x)]
n→∞limf^n=Ep(x)[f(x)]
数值积分方法可以对定积分进行近似计算,使用蒙特卡罗方法进行的定积分计算也被称作蒙特卡罗积分,对于函数
h
(
x
)
h(x)
h(x),计算它在区域
X
\mathcal X
X 内的定积分:
∫
X
h
(
x
)
d
x
\int_{\mathcal X}h(x)dx
∫Xh(x)dx
如果能够将
h
(
x
)
h(x)
h(x) 进行分解:
h
(
x
)
=
f
(
x
)
⋅
p
(
x
)
h(x)=f(x)\cdot p(x)
h(x)=f(x)⋅p(x)其中
p
(
x
)
p(x)
p(x) 构成一个概率密度函数,那么上述定积分可以表示为:
∫
X
h
(
x
)
d
x
=
∫
X
f
(
x
)
⋅
p
(
x
)
d
x
=
E
p
(
x
)
[
f
(
x
)
]
\int_{\mathcal X}h(x)dx=\int_{\mathcal X}f(x)\cdot p(x)dx=E_{p(x)}[f(x)]
∫Xh(x)dx=∫Xf(x)⋅p(x)dx=Ep(x)[f(x)]即我们将定积分问题转换成了
f
(
x
)
f(x)
f(x) 关于概率分布
p
(
x
)
p(x)
p(x) 的数学期望问题。实际上,我们选定一个概率分布函数
p
(
x
)
p(x)
p(x),而后取
f
(
x
)
=
h
(
x
)
p
(
x
)
f(x)=\cfrac{h(x)}{p(x)}
f(x)=p(x)h(x) 即可满足分解要求。
参照上部分进行数学期望估计的方法,我们按照分布
p
(
x
)
p(x)
p(x) 进行随机采样,当
n
n
n 足够大时,
f
(
x
)
f(x)
f(x) 的样本均值能够很好的估计总体的数学期望,即:
∫
X
h
(
x
)
d
x
=
E
p
(
x
)
[
f
(
x
)
]
≈
f
^
n
=
1
n
∑
i
=
1
n
f
(
x
i
)
\int_{\mathcal X}h(x)dx=E_{p(x)}[f(x)]\approx\hat f_n=\frac1n\sum_{i=1}^nf(x_i)
∫Xh(x)dx=Ep(x)[f(x)]≈f^n=n1i=1∑nf(xi)
【例】计算定积分:
∫
0
1
exp
(
−
x
2
/
2
)
d
x
\int_0^1\exp\big(-x^2/2\big)dx
∫01exp(−x2/2)dx
【解】在区间
(
0
,
1
)
(0,1)
(0,1) 内取
p
(
x
)
p(x)
p(x) 为均匀分布,即:
p
(
x
)
=
1
,
0
<
x
<
1
p(x)=1,~0<x<1
p(x)=1,0<x<1从而
f
(
x
)
=
exp
(
−
x
2
2
)
.
f(x)=\exp\Big(-\cfrac{x^2}2\Big).
f(x)=exp(−2x2).
而后按照蒙特卡罗积分法,在
(
0
,
1
)
(0,1)
(0,1) 区间内随机抽取
n
n
n 个样本点,他们的样本均值即为我们要求的定积分结果近似值,并且辛钦大数定律指出随着
n
n
n 趋向于无穷,这一近似程度总体上是越来越好的,不保证局部不会有震荡。
下面是对上述例子使用蒙特卡罗积分法的Python代码:
# -*- coding: utf-8 -*-"""
Spyder Editor
This is a temporary script file.
"""# In[]import numpy as np
import matplotlib.pyplot as plt
# In[]deffunc(x):return np.exp(-x**2/2)# In[]
n = np.linspace(10,1000,1000).astype(int)
res = np.zeros(len(n))# In[]for i inrange(len(n)):
x = np.random.rand(n[i])
x = func(x)
res[i]= np.mean(x)# In[]
plt.plot(n,res)