【LDA学习系列】Gibbs采样python代码
生活随笔
收集整理的這篇文章主要介紹了
【LDA学习系列】Gibbs采样python代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Gibbs采樣算法流程:從已知分布采樣,前提是預知條件分布
代碼流程:
代碼:
# -*- coding: utf-8 -*- ''' Created on 2018年5月15日 @author: user @attention: Gibbs Sampling利用條件概率產生符合分布的樣本,用于估計分布的期望,邊緣分布;是一種在無法精確計算情況下,用計算機模擬的方法。 '''import random import math import matplotlib.pyplot as pltdef xrange(x):return iter(range(x))def p_ygivenx(x, m1, m2, s1, s2):return (random.normalvariate(m2 + rho * s2 / s1 * (x - m1), math.sqrt(1 - rho ** 2) * s2))def p_xgiveny(y, m1, m2, s1, s2):return (random.normalvariate(m1 + rho * s1 / s2 * (y - m2), math.sqrt(1 - rho ** 2) * s1))N = 5000 K = 20 x_res = [] y_res = [] m1 = 10 m2 = -5 s1 = 5 s2 = 2rho = 0.5 y = m2for i in xrange(N):for j in xrange(K):x = p_xgiveny(y, m1, m2, s1, s2)y = p_ygivenx(x, m1, m2, s1, s2)x_res.append(x)y_res.append(y)num_bins = 50 plt.hist(x_res, num_bins, normed=1, facecolor='green', alpha=0.5) plt.hist(y_res, num_bins, normed=1, facecolor='red', alpha=0.5) plt.title('Histogram') plt.show()結果:
總結下MCMC的理解:
MCMC采樣的思想是:p(x)直接采樣存在困難,借助已知可采樣的分布 q(x) ,如高斯分布,然后按照一定的方法拒絕q(x)采樣的樣本,達到接近 p(x) 分布的目的。而基于可采樣分布q(x)是利用馬氏鏈細致平穩性來滿足的,收斂后的樣本即接近來自p(x)產生的樣本。
MCMC算法:
由于α(xt,x?)可能非常的小,比如0.1,導致大部分的采樣值都被拒絕轉移,采樣效率很低,因此提出M-H算法。
主要改造在接受率上,這個時候如果知道條件分布,那么接受率可以直接設置為1,即為Gibbs采樣算法。
總結
以上是生活随笔為你收集整理的【LDA学习系列】Gibbs采样python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LDA学习系列】Dirichlet分布
- 下一篇: 【LDA学习系列】M-H采样python