5.1.2 采样
什么是采样?
采样(sampling)指的是从一个概率分布中抽取样本的过程。
采出来的样本对应的是概率分布的x轴
采出来很多样本之后,画histogram的图,应该近似概率分布
采样方法
一般来说,我们在python或matlab等语言中可以很轻松的借助内置函数来从一些常见分布中采样:
from scipy.stats import norm,gamma
a = norm.rvs() # 从高斯分布中采样
print(a)
b = gamma.rvs(1) # 从伽马分布中采样
print(b)但关键问题是:假如不允许使用这些函数,我们又该如何采样呢?
接下来我们以高斯采样的例子介绍几种常见的采样方法。
问题:只给定均匀分布的样本,如何利用该均匀分布从一个高斯分布中采样?
方法1:逆变化采样(Inverse Transform Sampling)
几乎所有的已知分布都可以用这种方法采样(matlab和python内部就是这么做的)。
但是,如果一个复杂分布,其累积分布函数的反函数未知,如何采样?
方法2:接受-拒绝采样(Accept-Reject Sampling)
以下是代码示例:
首先,设置目标采样分布的概率密度函数:
选定值和提议分布函数,并画出分布。

现在我们来采样:
完成之后画出分布:

接受拒绝采样的直观理解:
在每一个的点上, 都有,即
从图上看,就是蓝线和红线的比值。
但是,接受拒绝采样需要找到一个准确的常数,如果这个常数无法直接得到怎么办?
方法3:Metropolis-Hasting采样
在MCMC的证明中会详细介绍该算法并解释它为什么成立,在这里,我们先来看看代码如何实现。
首先,设置目标分布的概率密度函数:

最后更新于