抽样或采样是指从目标总体中抽取出部分个体也就是样本,通过对样本的属性或特征进行分析,以此对总体进行评估。采样作为一种重要的数据分析方法,在深度学习、渲染等诸多方面具有广泛的应用。本文将回顾一种基本的采样方法即逆变换采样。
一、逆变换采样原理
逆变换采样是一种直接且有效的方法,用于从均匀分布中生成服从指定分布的随机数。假定我们需要从某个概率密度函数为
f
(
x
)
f(x)
f(x) 的分布中采样,其对应的累计密度函数为:
F
(
x
)
=
∫
−
∞
+
∞
f
(
x
)
d
x
(1)
F(x)= \int_{-\infty }^{+\infty} f(x)dx \tag {1}
F(x)=∫−∞+∞f(x)dx(1)
我们的目标是找到一个单调递增的转换函数 T ( x ) T(x) T(x), 使得我们从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1) 中采样的随机数 a a a, 经过该函数转换后服从上述分布: T ( a ) ∼ f ( x ) T(a) \sim f(x) T(a)∼f(x)。
进一步,如果将
T
(
a
)
T(a)
T(a) 当做一个随机变量,那么从累计分布函数的定义有:
P
(
T
(
a
)
≤
x
)
=
F
(
x
)
(2)
P(T(a) \leq x) = F(x) \tag{2}
P(T(a)≤x)=F(x)(2)
因为我们已经假设
T
(
a
)
T(a)
T(a) 是一个单调递增函数,因此我们可以用反函数对上式进行变换:
P
(
a
≤
T
−
1
(
x
)
)
=
F
(
x
)
(3)
P(a \leq T^{-1}(x)) = F(x) \tag{3}
P(a≤T−1(x))=F(x)(3)
又因为
a
a
a 服从
U
(
0
,
1
)
U(0,1)
U(0,1), 所以有:
P
(
a
≤
T
−
1
(
x
)
)
=
T
−
1
(
x
)
(4)
P(a \leq T^{-1}(x)) = T^{-1}(x) \tag{4}
P(a≤T−1(x))=T−1(x)(4)
联立上述 (3) 和 (4) 就有:
T
(
x
)
=
F
−
1
(
x
)
(5)
T(x) = F^{-1}(x) \tag{5}
T(x)=F−1(x)(5)
为此,我们只需要将从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1) 中采样的大量随机数分别输入到累计分布函数的逆函数 F − 1 ( x ) F^{-1}(x) F−1(x)即可实现预期的采样。
二、模拟实验
假设给定指数分布的概率密度函数如下:
f
(
x
)
=
{
0
;
x
<
0
e
−
x
;
x
≥
0
f(x)= \begin{cases} & 0 ;& x< 0\\ & e^{-x};& x\geq0 \end{cases}
f(x)={0;e−x;x<0x≥0
其对应的累计分布函数为:
F
(
x
)
=
∫
0
x
e
−
x
d
x
=
1
−
e
−
x
F(x)= \int_{0}^{x} e^{-x}dx = 1- e^{-x}
F(x)=∫0xe−xdx=1−e−x
F
(
x
)
F(x)
F(x) 对应的逆函数为:
F
−
1
(
x
)
=
−
ln
(
1
−
x
)
F^{-1}(x)= -\ln(1-x)
F−1(x)=−ln(1−x)
代码如下:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
# 设置样本数量
num_samples = 100000
# 生成均匀分布的随机样本
uniform_samples = np.random.uniform(size=num_samples)
# 应用逆变换采样方法
# 对于指数分布 e^(-x) (x >= 0),其逆变换为 -ln(1 - u),其中u是[0, 1)区间内的均匀随机变量
samples = -np.log(1 - uniform_samples)
# 绘制样本的直方图
plt.hist(samples, bins=50, density=True, alpha=0.75, color='blue', label='采样数据')
# 绘制指数分布的理论密度曲线
x = np.linspace(0, 10, 100)
plt.plot(x, np.exp(-x), 'r', label='理论密度曲线')
plt.xlabel('x')
plt.ylabel('密度')
plt.title('逆变换采样-指数分布')
plt.legend()
plt.grid(True)
plt.show()
实验效果:
参考资料:
B站宝藏数学讲解:【数之道 21】随机抽样、蒙特卡洛模拟与逆转换方法