''''

假设目标分布是: 一维的正太分布, i.e., N(0, 1)

建议的转移矩阵Q(i,j)也是正太分布, j 服从 N(i, 2^2)

pi(i)Q(i,j)*alpha(i,j) = pi(j)Q(i,j)*alpha(i,j)

where alpha(i,j) = pi(j)Q(j,i) 接受率

alpha(i,j) 可能很小,导致接受率比较小,采样效率低下

修正: alpha(i,j) = min(1, alpha(i,j ) / alpha(j, i))

= min(1, pi(j)Q(j,i) / pi(i)Q(i,j))

= min(1, pi(j) / pi(i)) # 通常Q(i,j)是对称的, 并且此时分布pi都无需归一化

Gibbs采样:

考虑二维的情况, A = (x1, y1), B = (x1, y2), C = (x2, y2)

那么有: pi(A)pi(B|A) = p(x1)p(y1|x1) * p(y2|x1)

pi(B)pi(A|B) = p(x1)p(y2|x1) * p(y1|x1)

上面两个式子相等:

==> pi(A)*p(y2|x1) = pi(B)*p(y1|x1), A和B具有相同的x坐标x1

同理,我们有

pi(B)*p(x2|y2) = pi(C)*p(x1|y2), B和C具有相同的y坐标y2

因此,我们可以构造出接受率为1的状态转移矩阵,如上定义,沿着某个坐标轴进行采样,其余坐标保持不变

高维的情况类似'''

from scipy importstatsimportnumpy as npimportmatplotlib.pyplot as pltdefMCMC_01():deftarget_pdf(x):return stats.norm.pdf(x, loc=0, scale=1) #随机变量的概率密度函数

X_0= 2.0Sample_X=[X_0]for t in range(100000):

X_i= Sample_X[-1]

X_j= np.random.randn() * 2 + X_i #服从分布 N(i, 2)

alpha = min(1, target_pdf(x=X_j) / target_pdf(x=X_i))

p=np.random.rand()if p < alpha: #接受

Sample_X.append(X_j)else:

Sample_X.append(X_i)

show_cnt= 10000Sample_X= Sample_X[-show_cnt:]

Standard_X=np.random.randn(show_cnt)

plt.figure(figsize=(15, 9))

plt.subplot(1, 2, 1)

plt.hist(Sample_X, bins=50, normed=1)

plt.xlabel('x')

plt.xlabel('p')

plt.title('MCMC')

plt.subplot(1, 2, 2)

plt.hist(Standard_X, bins=50, normed=1)

plt.xlabel('x')

plt.title('Normal(0, 1)')

plt.show()

MCMC_01()defMCMC_02():'''目标分布是二维的正太分布:N (u, sigma^2),

u= (u1, u2) = (3, 5),

sigma = [[sigma_1^2, rho*sigma_1*sigma_2],

[rho*sigma_1*sigma_2, sigma_2^2]]

= [[1, 2],

[2, 4]]

那么对应的条件分布为:

P(x1|x2) = N(u1 + (x2 - u2) * rho * sigma_1 / sigma_2, (1-rho^2) * sigma_1^2)

P(x2|x1) = N(u2 + (x1 - u1) * rho * sigma_2 / sigma_1, (1-rho^2) * sigma_2^2)'''u1, u2= 3, 5sigma_1, sigma_2, rho= 1, 2, 0.5

defgibbs_sampling_x2_given_x1(x1):#return: p(x2|x1)

now_u = u2 + (x1 - u1) * rho * sigma_2 /sigma_1

now_sigma= np.sqrt(1 - rho ** 2) * sigma_2 ** 2now_sigma=np.sqrt(now_sigma)return np.random.randn() * now_sigma +now_udefgibbs_sampling_x1_given_x2(x2):#return: p(x1|x2)

now_u = u1 + (x2 - u2) * rho * sigma_1 /sigma_2

now_sigma= (1-rho ** 2) * sigma_1 ** 2now_sigma=np.sqrt(now_sigma)return np.random.randn() * now_sigma +now_u

X_0= [-2.0, -3.0]

Sample_X=[X_0]for t in range(100000):

x_2_pre= Sample_X[-1][-1]

x_1= gibbs_sampling_x1_given_x2(x2=x_2_pre) #根据上一个采样点的x2, 采样现在的x1

x_2 = gibbs_sampling_x2_given_x1(x1=x_1) #根据刚刚采样点的x1, 采样现在的x2

Sample_X.append([x_1, x_2])if t<10:print('x_1:{} x_2:{}'.format(x_1, x_2))

show_cnt= 10000Sample_X= np.array(Sample_X[-show_cnt:])#Standard_X = np.random.randn(show_cnt)

print('Sample_X:', Sample_X.shape)

plt.figure(figsize=(10, 9))

plt.subplot(1, 1, 1)

plt.plot(Sample_X[:, 0], Sample_X[:,1], 'r.')

plt.xlabel('$x_1$')

plt.ylabel('$x_2$')

plt.title('Gibbs')

plt.show()

MCMC_02()

计算机什么课学mcmc,MCMC例子相关推荐

  1. 计算机什么课学mcmc,MCMC案例学习

    本文是R中mcmc包的一篇帮助文档,作者为Charles J.Geyer.经过knitr编译后的pdf文档可见此处,提供中文译稿的作者: 闫超,天津财经大学统计系2011级研究生,方向:非寿险准备金评 ...

  2. 计算机什么课学mcmc,科学网—MCMC的深入理解 - 蒋秋华的博文

    今天,重新将MCMC的word版本转换博文格式,但感觉还是写得很不好!重新整理一下!希望能够加深! 1. 采样的理解和Monte Carlo方法 原来学习电子技术时,对电压信号采样,有信号保持,采样间 ...

  3. 计算机数值分析课学后感,计算方法课程总结 心得体会

    计算方法课程总结 心得体会 一.课程简介:本课程是信息与计算科学.数学与应用数学本科专业必修的一门专业基础课.我们需在掌握数学分析.高等代数和常微分方程的基础知识之上,学习本课程.在实际中,数学与科学 ...

  4. 儿童学计算机编程好处,儿童编程课学了有好处吗?4大优势家长要知道

    少儿编程课程是什么?儿童编程课程有什么用? 越来越多的家长在朋友圈分享孩子写的小程序,也有很多家长不知所云,夸赞别人家的孩子真聪明,看看自家的孩子怎么啥都不会.其实不然,写小程序的孩子也许只是比你家的 ...

  5. 职校中的计算机学的是什么,职校计算机专业主要学什么课

    职校计算机专业主要学什么课2020-11-19 15:37:41文/樊越 很多同学都知道计算机是近几年的大热门课程,小编整理了一些计算机专业的课程,大家一起来看看吧. 计算机专业课程 学习计算机的基本 ...

  6. 计算机微课论文参考文献,微课教学学论文参考文献 微课教学参考文献怎么写...

    精选了[100个]关于微课教学学论文参考文献供您后续的写作参考,在写微课教学论文之前,很多大学生总是被微课教学参考文献怎么写难倒怎么办?请阅读本文! 一.微课教学论文参考文献范文 [1]"零 ...

  7. 计算机组装与维修post,用微课学计算机组装与维护教程(工作手册式)

    用微课学计算机组装与维护教程(工作手册式) 语音 编辑 锁定 讨论 上传视频 <用微课学计算机组装与维护教程(工作手册式)>是2020年4月电子工业出版社出版的图书,作者是邹承俊等. 书  ...

  8. 职高学生计算机学情分析,精选中职计算机说课稿三篇

    精选中职计算机说课稿三篇 中职计算机说课稿(一) 位评委老师,你们好!我是来自XXX职业中专计算机专业的教师XXX,今天我说课的题目是<电子表格基本操作>.本节课出自高等教育出版社出版的& ...

  9. 计算机专业刚学应该自学什么,晋中计算机专业主要学什么课?

    第二代:晶体三极管数字机(1958-1964年)手机软件层面的电脑操作系统.高語言以及编译程序主要用途以计算机的应用和事务管理主导,并刚开始进到工业控制系统行业.特性是容积变小.耗能减少.可信性提升. ...

最新文章

  1. checkbox反复调用attr('checked', true/false)只有第一次生效
  2. Android控件— — —ImageView
  3. 1.对程序的看法 2013.8.1
  4. 常用技巧性CSS:颜色渐变,截断英文单词,阴影文字.
  5. ubuntu切换python默认版本从2.7到3.5后 报错 ImportError: No module named 'pip'
  6. ECO生态币官网blog.sina.com.cn/ecocoin
  7. Linux查 ssh端口号
  8. 哈啰单车JAVA面经
  9. Java定时任务自动调用方法
  10. 10098 - Generating Fast
  11. 读书笔记:《Being Mortal》
  12. 如何使用视频格式转换器将flv转换成MP4
  13. c# Process监控进程 与 ManagementEventWatcher 监控进程
  14. kettle连接不上es7_kettle常见问题解决
  15. lsdyna如何设置set中的node_list_如何理解vue的双向绑定
  16. ATX 690 旋飞换卡飞 7速升级8速 21速升24速 方法
  17. 教你用Python将图片转化为字符画!附源代码
  18. 概率论中 相互独立 和 互不相容的关系
  19. 思维探索者:我们需要演绎与归纳
  20. 网件公司M4100-D12G三层交换机,部分配置说明(4)

热门文章

  1. PDAF(相位对焦)的基本原理
  2. 云端虚拟服务器,我叫“爱迪威”
  3. 学习C语言的7个步骤,对照一下,看你处在哪个阶段?
  4. 老当益壮?三星Galaxy Z Fold3或许依旧是业内最优秀的折叠屏旗舰
  5. 供应船符合国际空间站后,摇晃的开始
  6. 百度地图API在苹果手机上调用报错
  7. DTOJ 4841. 岩雀
  8. ng2-pdf-viewer一直白屏不显示内容,Setting up fake worker fail
  9. 华为mate20proud鸿蒙,手慢无!华为Mate 20 Pro馥蕾红、璨星蓝亮相:1月11日正式开售...
  10. 苹果 python蚂蚁森林自动收能量_用Python实现定时自动化收取蚂蚁森林能量,再也不用担心忘记收取了...