MCMC采样理论的一点知识
看了好多相关的知识,大致了解了一下马尔可夫链-蒙特卡罗采样理论,有必要记来下来。
蒙特卡罗积分:(来自:http://blog.csdn.net/itplus/article/details/19168937)
下面的写的很让人明白:好好理解一下,第一次感觉到积分与统计学的联系。
利用蒙特卡罗方法求积分的重点就是怎么如何采样指定的分布。。。。简单的分布如均匀分布我们有方法可以采样,但是复复杂的分布呢?如高斯分布呢?你怎么办??
这是就利用马尔可夫链的性质进行采样。
一些马尔可夫链的相关知识
在学习随机过程中,我们已经学习到了马尔可夫链的平稳性质。下面列举一下它的我们需要用到的性质(参考:叶钫. 马尔可夫链蒙特卡罗方法及其R实现[D]. 南京大学, 2014.)
平稳性的性质:
细致平衡性方程,很重要的。
这个等式,也可以这么理解,当进入稳定性的分布以后呢,从状态 i 传到状态 j 的能量与从状态 j 传递到状态 i 的能量是相同的。因为他们是平稳分布。
所以呢,现在的问题就是:我们想要按一定的 目标概率分布 进行采样,我们如何用马尔可夫链进行呢??
方法就是:构造一个马尔可夫链的稳态分布就是我们的 目标概率分布 , 谁决定了最后的稳态分布的概率呢?? 转移概率!!!!!所以呢,关键就是怎么构造转移概率。(一开始的时候,我老是想马尔可夫模型的状态如何确定呢?只有确定了状态才能求构造转移概率吧。。。。一直想不明白的。。。。。。现在觉得 这个问题不用先想,后面自然而然地就出来了)
我们构造转移概率的依据就是细致平衡条件;
一, 最基本的Metropolis采样算法
不多说明,因为,它其实就是Metropolis-Hastings算法的殊形式,即要求使用的状态提议分布函数为对称的,即:
此时的状态的接受函数也跟着变化了。变简单了。。
所以呢,直接看Metropolis-Hastings算法就好了。
二, Metropolis-Hastings算法
在 http://cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/ 已经给出了很好的介绍。这里我自己再手写一遍。
对于证明这样的转移概率满足细致平衡条件,就没有必要了,因为上面的推导过程就是在细致平衡条件上推导出来的。
最终的采样算法:
三, Gibbs 采样(吉布斯采样)
大家都说:Gibbs 采样也是Metropolis-Hastings算法的一种特殊的形式,怎么特殊呢?就是接受概率为1了。
我觉得呢,是找到了一个公式,一个什么公式呢?就是一个满足细致平衡条件的公式。
假如,二维的情况下,我们的目标采样分布函数表示为 P(x, y), 这时呢:有以下公式成立:
这么看, 公式4是不是满足细致平衡条件呢,对吧。。 只不过,两个状态的转移限定同一维坐标轴上进行的。
所以呢,只要我们把目标的采样分布函数的条件概率作为马尔可夫链的转移概率的话,转移一定的次数以后,最终的马尔可夫链的最终的状态分布就符合 我们的目标采样的分布函数。
二维的Gibbs采样算法:
n维的Gibbs采样算法:
参考:
http://www.cnblogs.com/xbinworld/p/4266146.html 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
http://blog.csdn.net/itplus/article/details/19168937 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
http://blog.csdn.net/google19890102/article/details/51785156 简单易学的机器学习算法——Metropolis-Hastings算法
http://blog.csdn.net/google19890102/article/details/51755242 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
http://blog.csdn.net/google19890102/article/details/51755245 简单易学的机器学习算法——Gibbs采样
MCMC采样理论的一点知识的更多相关文章
- MCMC(三)MCMC采样和M-H采样
MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)MCMC采样和M-H采样 MCMC(四)Gibbs采样(待填坑) 在MCMC(二)马尔科夫链中我们讲到给定一个概率平稳分布$\pi$ ...
- 关于cookie的一点知识
关于cookie的一点知识 1.cookie是存储在客户端计算机中. 2.cookie不能跨浏览器访问.cookie是浏览器保存的,所以不同浏览器对cookie的保存路径.存储数据的格式.文件大小都可 ...
- 小杜同学关于Query的一点知识
小杜同学关于jQuery的一点知识 1.关于jQuery jQuery就是一个JavaScript的函数库.既然是JS的的函数库,它自然是做JS做的东西了.毕竟jQuery只是用JavaScript编 ...
- 开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件
返回目录 本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求 ...
- Android 使用dip单位进行布局的一点知识
先看看怎么算出一个设备的dpi, 其实就是算出对角线上有多少个px,之后除上屏幕尺寸.比如,1280*720 的10.1寸设备,dpi = (sqrt(1280*1280+720*720)) / 1 ...
- Android 和iOS 中关于View 的一点知识
View的概念和方法十分重要,这里将对Android 和iOS中出现的,关于视图的一些知识点进行总结,预计文章会比较长,要许多时间慢慢补充. 先转载一部分资料,感谢原作者! 原链接为:http://b ...
- 关于dialog的一点知识
一般我们比较常用的就是AlertDialog,这个一般也不直接构造,而是用系统提供的builder构造器去构造一个dialog. AlertDialog.Builder builder = new A ...
- block的一点知识
一个block的笔记: http://www.cnblogs.com/xinye/archive/2013/03/03/2941203.html http://segmentfault.com/q/1 ...
- 关于调用约定(cdecl、fastcall、、thiscall) 的一点知识(用汇编来解释)good
函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个.什么样的参数.即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者 ...
随机推荐
- 解密DNSPOD应对DDoS攻击招式!
最近,安全专家Incapsula在最新版<DDoS威胁环境报告>指出.现在实施DDoS攻击的人仅仅有两类:一类是专业网络黑客.而还有一类就是所谓的botter. 简言之,booter就是僵 ...
- 行为类模式(四):迭代器(Iterator)
定义 提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节. UML 优点 简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通 ...
- angular学习笔记(三十)-指令(3)-templateUrl
这篇主要介绍指令中的templateUrl属性: templateUrl属性值是一个url路径,路径指向一个html模板,html模板会填充(或替换)指令内容: 比如上一篇文章里的案例,我们把原来的t ...
- (原创)C++11改进我们的程序之简化我们的程序(五)
这次要讲的是:c++11中的bind和function std::function 它是函数.函数对象.函数指针.和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针.以 ...
- Spark 保存文件 自定义分隔符
Spark 保存文件 调整分隔符 废话 找了半天没找到,在某个地方看到了类似的(文中说的是读取的时候指定),试了一下保存,发现也好用,详细如下. 用法 df.write.option("de ...
- MATLAB中-27开3次方得不到-3的原因
原代码: y=@(x) x.^(/); 运行结果: >> y(-27) ans = 1.5000 + 2.5981i 原因: 用(-8)^(1/3)时,matlab其实是调用C = pow ...
- LeetCode: Pow(x, n) 解题报告
Pow(x, n) Implement pow(x, n). SOLUTION 1: 使用二分法. 1. 负数的情况,使用以下的公式转化为求正数power,另外,考虑到MIN_VALUE可能会造成越界 ...
- Oracle 重启数据库实例
看你当前有多少个已经启动的实例: ps -ef|grep smon ORA-27101 Shared memory realm does not existORA-01034 ORACLE not a ...
- angularjs去掉加载时的{{}}
添加css <style> .ng-cloak {display: none;} </style> 在body头文件中加上class=ng-cloak &l ...
- 【Java】使用BigDecimal类进行精确小数计算
在商业计算中(尤其是计算价格)需要使用BigDecimal类来进行精确小数计算,因为用其他类型计算(如double)得到的结果不是精确的! 写个测试类. import org.junit.Test; ...