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代码相关推荐

  1. 【LDA学习系列】Latent Dirichlet Allocation主题模型理解

    LDA关键理解两点:1)Dirichret分布(理解共轭性):2)Gibbs采样. 个人觉得博客:https://blog.csdn.net/aws3217150/article/details/53 ...

  2. LDA求解:Gibbs采样算法

    本文是LDA主题模型的第二篇,读这一篇之前建议先读文本主题模型之LDA(一) LDA基础,同时由于使用了基于MCMC的Gibbs采样算法,如果你对MCMC和Gibbs采样不熟悉,建议阅读之前写的MCM ...

  3. jenkins学习系列之PMD静态代码检测

    一.jenkins集成PMD流程 实际生产中,上线的代码往往要经过检测,满足一些规则才行,这些规则可以是直接使用官方的规则,也可以是自己写的. 因为目前的工作和java有关,所以这里以java代码静态 ...

  4. mh采样算法推导_深度学习:Gibbs 采样

    1. 什么是Gibbs采样 Gibbs采样是MH算法的一种特例(α==1),因此可以保证Gibbs抽取的样本,也构成一个非周期不可约稳定收敛的马氏链:Gibbs采样适用于样本是两维或以上的情况:通过积 ...

  5. 【LDA学习系列】M-H采样python代码

    LDA说的比较利索参考:https://segmentfault.com/a/1190000012215533 # -*- coding: utf-8 -*- ''' Created on 2018年 ...

  6. 【LDA学习系列】MCMC之Metropolis-Hastings采样算法python代码理解

    Metropolis-Hastings采样算法的流程: 代码一:有助于理解算法流程 # -*- coding: utf-8 -*- ''' Created on 2018年5月15日@author: ...

  7. 【LDA学习系列】Dirichlet分布python代码

    代码: # -*- coding: utf-8 -*- ''' Created on 2018年5月15日 @author: user @attention: dirichret distributi ...

  8. 【LDA学习系列】Beta分布Python代码

    代码: # -*- coding: utf-8 -*- ''' Created on 2018年5月15日 @author: user @attention: beta distribution '' ...

  9. 【LDA学习系列】神奇的Gama函数Python代码

    代码: # -*- coding: utf-8 -*- ''' Created on 2018年5月15日 @author: user @attention: gama function ''' im ...

最新文章

  1. starGAN原理代码分析
  2. java 做计算器 百度云_用Java做一个简单的计算器
  3. java 栈内存结构_JVM内存结构概念解析
  4. 面向.NET开发人员的Dapr——绑定
  5. java并发编程(十七)内存操作总结
  6. Sentinel熔断限流器工作原理
  7. Android 8.0 学习(22) Android8.0平台Eng版本中显示界面切换闪红框
  8. python怎么让py里面逐行运行_[python]开发环境bug(求助)
  9. SublimeText3.2.1的汉化方法(也适用于3)
  10. Shell脚本里的双冒号是什么意思
  11. 用 Python 计算综合测评中的专业成绩加权平均分
  12. 南京邮电大学汇编——实验一:汇编语言语法练习与代码转换
  13. pintos (1) -- Alarm Clock
  14. 最坏适应算法的模拟(c++实现)
  15. redhat linux 禁用网卡,RedHat Linux下防火墙配置技巧
  16. Docker入门笔记(1)
  17. python编程处理excel数据_python实现对excel进行数据剔除操作实例
  18. 百度高级搜索指令大全
  19. Every derived table must have its own alias(sql语句错误解决方法)
  20. 关于精简安装office2010的步骤

热门文章

  1. 软考高项之风险管理-攻坚记忆
  2. 云serverlinux又一次挂载指定文件夹(非扩充)
  3. go map并发写错误问题
  4. bzoj1078【SCOI2008】斜堆
  5. hihoCoder - 1082 - 然而沼跃鱼早就看穿了一切 (字符串处理!!)
  6. [MySQL]命令行工具和基本操作
  7. python 优秀文章索引
  8. MVC-07 案例1
  9. Linux下找不到动态链接库
  10. Android开发过程中在sh,py,mk文件中添加log信息的方法