逆变换采样
要懂逆变换采样(Inverse transform sampling), 要先懂 pdf 和 cdf。
probability density function(概率密度函数pdf)
一直以为pdf stands for probability distribution function.原来是 density(也差不多), 看几个例子:
这个就是 drand48() 函数,产生的值在[0,1),概率是均匀(uniform)分布的。
还有最出名的就是正态(normal)分布:
再看一个例子,比如我们想要产生随机数r位于[0, 2)之间,但是概率跟数字r成正比:
pdf(r) = Cr,我们又知道数字必定在[0, 2) 之间,所以积分也好,三角形面积也好,我们会容易知道其实 pdf(r) = r/2.
我们现在只有d = drand48(),如果我们想要非均匀分布,可以 e = d*d,这样会靠近0的概率更大,比如(0.1 * 0.1 = 0.01,会有更多的这种)。还可以比如 e = sqrt(d)...
Cumulative distribution function(累积分布函数cdf)
cdf(x) = Area(pdf, -infinity, x) 也就是从-∞累积到x发生的概率。
对于我们的 pdf(r) = r/2 来说:
- cdf(x) = 0 : x < 0
- cdf(x) =
: 0 < x < 2 // 当然用面积看也ok
- cdf(x) = 1 : x > 2
它的 cdf 长这样:
cdf(1) = 1/4 = 0.25,也就是我们随机产生一个数r:
- r < 1 : 25% 的概率小于1
- r > 1 : 75% 的概率大于1
这就是一个明显的不均匀分布。此时我们手上只有一个 drand48(), 如果我们想要用drand48()来产生上述的pdf需要怎么做呢?
逆变换采样
这时候我们就需要逆变换采样,它的原理是这样的:
u ~ uniform distribution
T(u) = X