MCMC(Markov Chain Monte Carlo),即马尔科夫链蒙特卡洛方法,是以马尔科夫平稳状态作为理论基础,蒙特卡洛方法作为手段的概率序列生成技术。

MCMC理论基础

如果转移矩阵为P的马尔科夫链平稳状态和我们研究的概率质量函数(概率密度函数)分布一致,那么我么从任意初始值开始,经过一定次数的概率转以后,后续的转移值组成的序列必然服从马尔科夫平稳状态分布,也就是服从我们研究的概率分布,这样就生成了我们研究的概率分布的模拟数据序列。

对于任意初始值X0,经过n次概率转移后,生成值符合平稳状态分布,并且后续概率转移始终符合平稳状态分布,所以我们可以认为从第n次开始的转移值序列符合平稳状态分布。数学表达如下

1、          初始值为X0,X0通过转移矩阵P生成马氏链序列。

2、          马氏链经过n次转移后达到平稳状态。

3、          则从第n次开始的转移序列符合平稳状态分布。

我们用城市化进程中人口转移模型来阐述一下这个思想的物理意义。我们假设第一代人为农村人。农村人下一代为农村人,第3代为城市人,城市人接下来9代为城市人,第10代为农村人(我们模拟农村人转化为城市人概率为0.5,城市人转化为农村人概率为0.1)。如下表,按照这种规律生成的随机序列农村人城市人比例为1:5,与之前计算的平稳分布17:83基本相等。实际上该模型下的马氏链平稳条件为:0.5 * 农村人 = 0.1 * 城市人,可以推测出农村人 : 城市人 =  1 : 5,与我们的模拟是一致的。

我们已经知道,使马尔科夫链的平稳状态等同于我们研究的概率分布,就可以构造出符合该概率分布的随机序列。现在的问题是如何构造出这样的马尔科夫链,使得其稳定分布等于我们研究的概率分布。

细致平稳条件

如下更强的马尔科夫链稳定状态定理可以解决这个问题

定义显而易见,从任意状态i转移到状态j的速率等于从状态j转移到状态i的速率,则状态转移稳定。城市化进程的例子充分说明了这一点。定理中π分布就是我们研究的概率分布,我们构造出P,则构造出了稳定状态满足π分布马尔科夫链。

算法实现

我们随机初始化一个转移矩阵Q(比如均匀分布),q(i, j)表示从状态i转移到状态j的概率。一般情况下Q显然不满足细致平稳条件,即

p(i)q(i, j) != p(j)q(j, i)

我们构造α(i, j)与α(j, i),使等式成立,即

其中

α(i, j) = p(j)q(j, i) α(j, i) = p(i)q(i, j)

这样,我们通Q与α,构造了一个符合细致平稳条件的Q’。

Q一般来说是我们熟悉的概率分布,计算机易于模拟,但是Q’怎么模拟呢?在构造Q’的过程中,我们引入的α(i, j)称作接受率,我们生成一个符合Q分布的状态后,再以α(i, j)的概率来接受状态转移。(实际上q(j, i)α(i, j)就是转移矩阵Q’中状态i转移到j的概率,我们以α(i, j)接受状态转移就是在进行乘以转移矩阵Q’运算)

MCMC算法如下

上述算法还有一个小缺陷,接受率α(i, j)可能较小,导致状态转移概率太小,收敛较慢。实际上,对于细致平稳条件,等式两边同时乘以一个倍数,也是成立的。于是我们把细致平稳条件改造为

p(i)q(i, j) α(i, j)/ α(j, i) = p(j)q(j, i)

则可以用如下接受率进行状态转移

改进后的MCMC算法如下

参考:

https://www.jianshu.com/p/28d32aa7cc45

《LDA数学八卦》

MCMC算法深入理解的更多相关文章

  1. MCMC算法解析

    MCMC算法的核心思想是我们已知一个概率密度函数,需要从这个概率分布中采样,来分析这个分布的一些统计特性,然而这个这个函数非常之复杂,怎么去采样?这时,就可以借助MCMC的思想. 它与变分自编码不同在 ...

  2. IRT模型的参数估计方法(EM算法和MCMC算法)

    1.IRT模型概述 IRT(item response theory 项目反映理论)模型.IRT模型用来描述被试者能力和项目特性之间的关系.在现实生活中,由于被试者的能力不能通过可观测的数据进行描述, ...

  3. openCV中直方图均衡化算法的理解

    直方图均衡化就是调整灰度直方图的分布,即将原图中的灰度值映射为一个新的值.映射的结果直观表现是灰度图的分布变得均匀,从0到255都有分布,不像原图那样集中.图像上的表现就是对比度变大,亮的更亮,暗的更 ...

  4. 机器学习之MCMC算法

    1.MCMC概述 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC).之前已经介 ...

  5. SDUT OJ 数据结构实验之串一:KMP简单应用 && 浅谈对看毛片算法的理解

    数据结构实验之串一:KMP简单应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  6. POJ1523(割点所确定的连用分量数目,tarjan算法原理理解)

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7406   Accepted: 3363 Description C ...

  7. 【转】浅谈对主成分分析(PCA)算法的理解

    以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识.本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会. 主成分分析(PCA ...

  8. Vue中diff算法的理解

    Vue中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结 ...

  9. 关于KMP算法中,获取next数组算法的理解

    参考:KMP入门级别算法详解--终于解决了(next数组详解) https://blog.csdn.net/lee18254290736/article/details/77278769 在这里讨论的 ...

随机推荐

  1. 【PyQt5-Qt Designer】制作炫酷的启动界面+进度条

    QProgressBar 进度条+QSplashScreen 启动界面 知识点: 1.进度条 #将进度条的最大值.最小值设置为相同时,产生跑马灯效果 self.progressBar.setMinim ...

  2. 什么是url?

    什么是URL? URL是统一资源定位器(Uniform Resource Locator)的缩写,也被称为网页地址,是因特网上标准的资源的地址. URL举例 http://www.sohu.com/s ...

  3. redis缓存和mysql数据库同步

    附redis关于缓存雪崩和缓存穿透,热点key 穿透 穿透:频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层.从而失去缓存的意义. 解决办法: 持久层查询不到就缓存空结果,查询时先判断缓存 ...

  4. 20190122 Oracle if-- elsif -- else -- if end

    DECLARE V_SYSTIME VARCHAR2(8); PROCEDURE KB_RUNNING(I_DATE DATE) IS BEGIN V_SYSTIME :=TO_CHAR(I_DATE ...

  5. Redis入门到高可用(九)——有序集合zset

    一.数据结构 集合与有序集合,列表与有序集合的对比 二.主要API zadd 将一个或多个 member 元素及其 score 值加入到有序集 key 当中. zrem 移除有序集 key 中的一个或 ...

  6. 帝国cms-tab

    <ul class="intro_commenTab"> [e:loop={"select classname,classpath,classid from ...

  7. element-table中使用checkbox

    <el-table-column label="> <template slot-scope="scope"> <el-checkbox v ...

  8. bcolz的新操作

    1.直接修改 eg:把data.bcolz文件中A列为0的数据填充为1000. data = bcolz.open("data.bcolz", "a") #以& ...

  9. git push 报错:you are not allowed to upload merges

    git rebase Cannot rebase: You have unstaged changes. git stash # 每次 push 前 git pull --rebase git pus ...

  10. shell 脚本中如何添加多行注释

    shell中有时会用到多行注释,一种时vim的快捷方式,我不太熟悉,一种是如下 :<<!   ......! 使用: :<< !.......! 比如: :<< ! ...