仅知道概率密度是不狗的,需要的是样本,gibbs sampling 就是获取样本的。
- Gibbs 抽样将高维的连续概率密度分布退化为一维概率密度函数分布的抽样;
- 2 维 ⇒ 1 维;
- Gibbs 采样极大地降低了高维概率分布函数采样的难度;
- Gibbs 抽样的三阶段:
- Initialization
- burn-in
- sampling
为了使得采样样本之间尽可能地保持独立,可在采样阶段设置每隔 L 次采样一次:
# L, num_burn, num_samples samples = [] for i in range(num_burn+L*num_samples): if i > num_burn: ... x = ... if (i-num_burn) % L == 0: samples.append(x)
Gibbs 抽样是一种基于 MCMC(Markov Chain Monte Carlo)策略的抽样方法,具体来说对于一个 d维的随机向量
x = np.random.randn(d)
for i in range(d):
x[i] = conditional_prob(...)
...随着抽样次数的增加,随机变量 (x1(n),x2(n),…,xd(n))的概率分布将以 n的几何级数的速度收敛于
例如,一个样本是 3 维的,姑且设为 (g,u,b),一般来说,我们无法直接获得样本的分布,但我们知道条件概率 p(g|u,b)、p(u|g,b)、p(b|g,u):
- (1)给 (g,u,b)赋初值,(g0,u0,b0),
- (2)利用 p(g|u0,b0),计算 g1
- (3)利用 p(u|g1,b0),计算 u1
- (4)利用 p(b|g1,u1),计算 b1
- (5)重复 (2)-(4),这样我们就得到一个 Markov Chain {(g0,u0,b0),(g1,u1,b1),…,(gt,ut,bt)}
版权声明:本文为lanchunhui原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。