马尔可夫蒙特卡洛(MCMC)附python代码

马尔可夫蒙特卡洛(MCMC)

1.马尔可夫链(Markov Chain)

随机过程是一组随机变量 X t X_t Xt的集合, t t t为整数的时候,就是离散随机过程。马尔可夫过程是指一个满足马尔可夫性质的随机过程。马尔可夫性质是指: P ( X t + 1 ∣ X t , ⋯ , X 1 ) = P ( X t + 1 ∣ X t ) P(X_{t+1}|X_{t},\cdots,X_1)=P(X_{t+1}|X_t) P(Xt+1Xt,,X1)=P(Xt+1Xt)

也就是说,当前随机变量的分布,只与上一个时间的随机变量取值有关系,与之前的取值都是独立的。

1.1 平稳分布

(定义)状态空间:状态空间是指这些随机变量所有取值的集合。例如,下雨和晴天的概率是0.1和0.9,则状态空间就是下雨和晴天。

**状态转移矩阵:**当状态空间大小K是有限的,则状态之间的转移概率可以用一个矩阵 M ∈ R k × k M\in \mathbb{R}^{k\times k} MRk×k来表示。其中, M i j M_{ij} Mij表示从状态 i i i转移到状态 j j j的概率。例如,从下雨转移到晴天的概率是0.9,从晴天转移到下雨的概率是0.2,从下雨转移到下雨本身的概率是0.1,从晴天转移到晴天本身的概率是0.8。则可表示为一个 2 × 2 2\times 2 2×2的矩阵,为:
M = [ 0.8 0.2 0.9 0.1 ] M=\begin{bmatrix} 0.8 & 0.2 \\ 0.9 & 0.1 \end{bmatrix} M=[0.80.90.20.1]
于是,如果晴天和下雨本身的初始状态分布 π \pi π是:
π = [ 0.9 0.1 ] T \pi=\begin{bmatrix} 0.9\\ 0.1 \end{bmatrix}^T π=[0.90.1]T
则经过一次状态转移就是:
π n e w = π M \pi_{new}=\pi M πnew=πM
对于 π n e w \pi_{new} πnew,可以继续进行状态转移。

转移矩阵显然需要满足:
∑ j M i j = 1 \sum_jM_{ij}=1 jMij=1
也就是每一行是归一化的。因为由原来某种状态转向所有状态的概率之和肯定是1。

(定义)平稳分布: 对于状态转移矩阵为 M M M的马尔可夫链,如果存在 π \pi π,使得

π = M π \pi=M \pi π=Mπ,则称 π \pi π是该马尔可夫链的平稳分布。也就是说,经过一次状态转移后,状态不再发生改变。

对于 M M M满足一定条件的马尔可夫链来说,初始状态经过一定时间的状态转移之后,一定会收敛。
π = lim ⁡ N → ∞ M N π \pi=\lim_{N\rarr\infty}M^N\pi π=NlimMNπ
也就是说,乘以了一定次数的状态转移矩阵M之后,状态分布就不会变了。注意,这里的状态转移矩阵 M M M是需要满足两个条件,为所有状态可遍历性可非周期性。

2.2 细致平稳条件(Detail Balance Condition)

细致平稳条件是马尔可夫收敛的充分条件,保证了马尔可夫链一定会收敛。

(定义)细致平稳条件: 给定一个状态空间中的分布 π \pi π,如果转移矩阵为 M M M的马尔可夫链满足:
π i m i j = π j m j i , ∀ 1 ≤ i , j ≤ K \pi_im_{ij}=\pi_jm_{ji}, \forall1 \le i,j\le K πimij=πjmji,1i,jK
则该马尔可夫链在已经一段时间的状态转移之后就一定会收敛到分布 π \pi π

换句话说,如果满足该马尔可夫链的状态转移矩阵满足了上述条件,则 π \pi π就是该马尔可夫链的平稳分布,而且一定能够收敛到这个平稳分布。

2.MCMC

MCMC是对某个概率分布进行采样,获得样本的方法,是一种采样方法。对于一个复杂的概率密度分布,我们很难获得其解析的性质,因此采用采样的方式,通过样本来观察这个概率分布的性质。

MCMC是思路是找到一个平稳分布为所需要采样分布的马尔可夫链,其本质是找到一个转移矩阵,确定了平稳分布对应的转移矩阵,就确定了马尔可夫链。

但是,随便一个状态转移矩阵,一般无法满足细致平稳条件。对于某个希望采样的平稳分布 π \pi π,对于某一随机状态转移矩阵,并不能保证收敛到到这个平稳分布,也就是:
π i m i j ≠ π j m j i \pi_im_{ij}\ne \pi_jm_{ji} πimij=πjmji

2.1 Metropolis-Hastings采样方法

在上面公式的两边同时乘以一个数,则存在这样的数,使得:
π i m i j α i j = π i m j i α j i ∀ 1 ≤ i , j ≤ k \pi_im_{ij}\alpha_{ij}=\pi_im_{ji}\alpha_{ji} \forall1\le i,j \le k πimijαij=πimjiαji1i,jk
此时,M为某个不满足 π \pi π对应细致条件的转移矩阵,是任意的转移矩阵,而经过 α \alpha α的修正,就满足了细致平稳条件,此时可以令 p i j = m i j α i j p_{ij}=m_{ij}\alpha_{ij} pij=mijαij,此时 P ∈ R k × k P\in R^{k \times k} PRk×k就为一个新的转移矩阵,该矩阵就是满足细致平稳条件的转移矩阵。

这样的数 α i j \alpha_{ij} αij如何找到呢?Metropolis-Hastings方法构造了如下的 α i j \alpha_{ij} αij:
α i j = m i n { π j m j i π j m i j , 1 } \alpha_{ij} = min\{\frac{\pi_jm_{ji}}{\pi_jm_{ij}},1 \} αij=min{πjmijπjmji,1}
如果令 α i j \alpha_{ij} αij等于上式,则可使得调整后的转移矩阵满足 π \pi π对应细致平稳条件,推导如下:
π i m i j α i j = π i m i j m i n { 1 , π j m j i π i m i j } = m i n { π i m i j , π j m j i } = π j m j i m i n { π i m i j π j m j i , 1 } = π j m j i α j i \pi_im_{ij}\alpha_{ij} \\ =\pi_im_{ij}min\{1,\frac{\pi_jm_{ji}}{\pi_im_{ij}}\}\\ =min\{\pi_im_{ij},\pi_jm_{ji}\}\\ =\pi_jm_{ji}min\{\frac{\pi_im_{ij}}{\pi_jm_{ji}},1\}\\ =\pi_jm_{ji}\alpha_{ji} πimijαij=πimijmin{1,πimijπjmji}=min{πimij,πjmji}=πjmjimin{πjmjiπimij,1}=πjmjiαji
故上面所构造的 α i j \alpha_{ij} αij,可以使得细致平稳条件得到满足。

由此,只需要先进行一定次数的随机游走(预烧期)之后,马尔可夫链收敛到平稳分布。然后继续通过随机游走,获得新的样本。由于此时的样本的分布已经是平稳分布,同时也是我们需要采样的分布,获得的样本就属于所需要采样的分布。

此时,马尔可夫链做了两件事请:

  • 首先以原本转概率矩阵的概率进行转移
  • 然后,在转移的半截腰中,在根据 α i j \alpha_{ij} αij来再次判定是否转移。

因此, α i j \alpha_{ij} αij可以视作某种接受概率,马尔可夫链进行一次转移之后,以这个接受率判断是否进行这次转移。

那么,如何让 α i j \alpha_{ij} αij发挥作用呢?

  1. 当马尔可夫链进行随机游走,就产生了一个新的样本
  2. 生成一个0~1上的服从均匀分布的随机数
  3. 如果随机数大于 α i j \alpha_{ij} αij,就接受这个新的样本,也就是认为。反之,则不接受这个新的样本。

2.2 转移矩阵的选择问题

上面已经说过,我们对于原本的转移矩阵,一般都不会满足细致平稳条件,因此引入了 α \alpha α来调整这个转移矩阵。当时我们说是任意的转移矩阵。对于算法而言,是可行的。但是对于计算机实现而言,最好这个转移矩阵是方便使用的。这个转移矩阵要满足两个条件:

  • 1.从某个状态转移向所有状态的概率之和为1,也就是行归一化,这是转移矩阵的基本性质。
  • 2.易于计算机模拟,也就是我们要先进行随机游走,然后再用 α \alpha α来判定这个随机游走是否成立。那随机游走的过程一定要方便。

对于状态空间离散的情况,这个矩阵是极容易设计的。也就是随机变量离散的情形下。但是对于连续随机变量,如何处理呢?其状态空间是无穷大的,相当于是一个无穷大是矩阵。

通常的做法利用一个高斯分布来做。
m i j = N ( x j ∣ μ = x i , σ = 1 ) m_{ij}=\mathcal{N}(x_{j}|\mu=x_{i},\sigma=1) mij=N(xjμ=xi,σ=1)
也就是说,每个旧的样本点所在的位置为均值的一个高斯分布。首先,满足某个状态到所有状态之和是1,因为高斯分布是归一化的 ∫ x p ( x ) d x = 1 \int_xp(x)dx=1 xp(x)dx=1。其次,高斯分布,对于计算机而言是容易采样的。

同时,由于高斯分布是对称的,因此从 i i i转移到 j j j的概率和从 j j j转移到 i i i的概率是相等的,也就是以 i i i为均值的高斯分布在 j j j处的值和以 j j j为均值的高斯分布在 i i i处的值是相等的。换句话说, m i j = m j i m_{ij}=m_{ji} mij=mji,因此原本 α i j \alpha_{ij} αij的表达式可以化简写作:
α i j = m i n { π j m j i π i m i j , 1 } = m i n { π j π i , 1 } \alpha_{ij} = min\{\frac{\pi_jm_{ji}}{\pi_im_{ij}},1\}\\ =min\{\frac{\pi_j}{\pi_i},1\} αij=min{πimijπjmji,1}=min{πiπj,1}

2.3算法流程

  1. 随机选取一个初始样本点
  2. 在初始点处生成均值为初始点值的高斯分布,在高斯上进行一次采样,模拟了一次随机游走,获得一个新的样本点。
  3. 计算接受率 α i j \alpha_{ij} αij,这个可以计算,因为概率分布已知,这里的概率分布就是所需要采样的概率分布。
  4. 生成0~1随机数,通过和接受率比较,决定是否接受这次随机游走。如果随机数大于接受率,则拒绝此次随机游走,将旧样本点(第一次的话就是初值)收入样本集合。如果随机数小于接受率,接受此次随机游走,把新的样本点收入样本集合。
  5. 上一步中,如果接受了随机游走,则再新的样本点处生成高斯分布,进行下一次随机游走。如果拒绝了,则在旧的样本点处生成高斯分布,随机游走。
  6. 循环上述过程,如100000次,就可获得100000个样本点。
  7. 当游走一定次数之后,此时马尔可夫链收敛到平稳分布,生成的样本点就服从所需要分布。而在此次数之前的样本点不服从平稳分布,舍弃这部分样本点。常规做法是舍弃前10000个样本点,也就是认为进行了10000次随机游走之后马尔可夫链收敛了。这10000次随机游走称为预烧期(burn-in)。

3.代码

3.1采样二维高斯分布

import numpy as np
import scipy
import seaborn
import matplotlib.pyplot as plt# 定义二维高斯分布,均值默认0均值,协方差矩阵默认单位阵
def guassian2d(x,mean=np.array([[0],[0]]),covariance = np.array([[1,0],[0,1]])):"""Return the probability of the value in 2-dimension Guassiandistribution given mean vector and variance matrix.---Args:x: The value of the random variablemean: mean vector of the variancevariance: 2x2 covariance matrix---"""# 做维度的检查if mean.shape != (2,1):raise Exception("Dimension of the mean is wrong.")if covariance.shape != (2,2):raise Exception("Dimension of the covariance matrix is wrong.")# 高斯的核,这是贝叶斯的说法,在计算共轭分布时常用# 这里为了清晰因此将高斯分开算guassian_kernel =\np.exp((-1/2)*np.dot(np.dot((x-mean).T,np.linalg.inv(covariance)),(x-mean)))probability = guassian_kernel/(2*np.pi*np.sqrt(np.linalg.det(covariance)))return probabilityN_BURN_IN = 1000 # 预烧期1000次,先随机游走1000次认为收敛
N_SAMPLINGS = 10000 #采样总计10000次,也就是随机游走10000次def metropolis_hastings(prob_func, n_burn_in, n_samplings):"""Given a probablity function then return the samplings."""x_old = np.array([[0],[0]]) # 任意初始化一个样本点# 生成一个数组,存放样本点,一共采样10000次,有10000个样本点# 但是最后这10000个样本的前1000个不需要,是预烧期的samples = np.zeros((2,n_samplings), np.float32)for i in range(n_samplings):# 进行一次随机游走# 这里原本是以旧样本为均值,方差为1的高斯分布来采样,模拟随机游走# 等价于在原来的样本上加上一个0均值,方差为1的高斯分布采样x_new = np.random.normal(loc=x_old, scale = 1, size = (2,1))# 计算接受率alphaalpha = np.min([prob_func(x_new)/prob_func(x_old),1])# 随机生成0-1随机数,小于接受率,则将新样本接收if np.random.rand() < alpha:x_old = x_newsamples[:,i] = x_new.reshape(2,)# 大于接受率,则接受旧样本(注意不是舍弃)else:x_old = x_oldsamples[:,i] = x_old.reshape(2,)return samplesif __name__ == "__main__":samples = metropolis_hastings(guassian2d, N_BURN_IN, N_SAMPLINGS)seaborn.jointplot(samples[0,N_BURN_IN:], samples[1,N_BURN_IN:])plt.show()

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34422.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隐马尔可夫模型在map-matching中的应用

该要 Map-matching是指将手机gps上报的轨迹点&#xff08;经纬度&#xff09;映射到路网上。由于精度问题&#xff0c;上报的轨迹点通常和实际位置有所偏差&#xff0c;因此产生了很多算法进行绑路&#xff0c;其中效果最好的是hmm&#xff08;隐马尔可夫模型&#xff09;的应…

隐马尔可夫模型HMM+维特比算法(Viterbi Algorithm)进行词性标注代码实现(自然语言处理课程第二次作业)

文章目录 一、理论描述二、算法描述三、详例描述具体过程分析题目数据预处理转移概率矩阵&#xff1a;发射概率矩阵&#xff1a; HMM维特比算法进行词性标注开始进行词性标注&#xff1a;The&#xff1a;bear&#xff1a;is&#xff1a;on&#xff1a;the&#xff1a;move&…

海尔计算机无法装win7系统,海尔Haier电脑预装win8换win7系统BIOS设置及安装教程

现在市场很多笔记本或一体机电脑都是预装win8或win8.1操作系统&#xff0c;但很多用户还是比较习惯使用Win7或xp操作系统&#xff0c;所以会在预装的win8系统上安装自己所习惯的操作系统&#xff0c;一般情况要更换预装的系统是要对BIOS进行设置的&#xff0c;在不同品牌的电脑…

海尔微型计算机硬盘如何拆卸,海尔a62的详细拆机步骤【图文教程】

随着社会的不断发展&#xff0c;台式电脑已经无法满足市场的需求了&#xff0c;现在 笔记本电脑 非常地流行&#xff0c;它以轻薄的机身和过高的配置赢得了很多顾客的喜爱&#xff0c;所以市场上也出现了各种品牌的笔记本电脑。大家知道吧&#xff0c;任何东西都是优势互补的&a…

海尔计算机无法装win7系统,海尔品牌机win10改win7系统教程

近期有朋友向小编反映说&#xff0c;最近想将海尔品牌机预装的win10系统改成win7的&#xff0c;但是每次ghost完系统后&#xff0c;总是启动不开&#xff0c;这是怎么回事呢&#xff1f;这一般是bios的设置不对&#xff0c;这里小编就来给大家介绍一下海尔品牌机怎么将win10改成…

海尔android 电视直播软件,海尔智能电视如何安装直播软件看直播

嗨&#xff0c;大家好&#xff0c;今天我来给大家简单介绍一下智能电视怎么安装第三方软件&#xff1f;买了智能电视&#xff0c;很多用户 都会发现它不能像传统电视一样去看直播电视。这个时候我们就需要去安装第三方软件去解决。 一般来说&#xff0c;在智能电视里面&#xf…

海尔微型计算机U盘启动,海尔台式电脑如何bios设置u盘启动教程

许多用户打算使用u盘给海尔台式电脑装系统&#xff0c;但在操作过程中发现不会设置u盘启动&#xff0c;其实只要了解清楚&#xff0c;掌握海尔台式电脑bios设置u盘为第一启动项的方法很是简单&#xff0c;今天快启动小编就为大家分享下详细操作教程把。 海尔台式电脑从u盘启动有…

海尔云悦2db微型计算机,家庭主机新选择 海尔云悦mini2首发评测

1海尔云悦mini2评测前言 虽然家用台式机的市场份额一直持续下滑,以至于业界很多人认为台式机已经退出历史舞台,被笔记本、一体电脑所代替。但是,笔者要在这里为台式机正音,台式机依然是很多用户的选择,并且台式机体积越来越小,功能越来越多。甚至,台式机开始进军客厅战场…

海尔电视android怎么设置,海尔电视怎么连接手机 海尔电视连接手机步骤

随着电视发展越来越迅速&#xff0c;电视的更新换代也是非常越来越快。而如今电视也变得越来越智能化了。它不但可以看电视&#xff0c;还可以连接网络&#xff0c;连接手机的。而电视行业品牌也是非常的多的。而对于电视老品牌 海尔 &#xff0c;它们的产品也是非常优秀的。并…

海尔电视 android,海尔电视遥控器

海尔电视遥控器手机版是一款多功能智能电视控制软件。海尔电视遥控器app支持多种手机品牌&#xff0c;通过与手机连接之后&#xff0c;手机就变成了遥控器&#xff0c;使用更方便&#xff01; 软件介绍 海尔电视遥控器app全面支持多品牌手机&#xff0c;没有网络也能轻松遥控电…

海尔电视 android,海尔电视怎么投屏

导言&#xff1a;你知道海尔电视怎么投屏吗&#xff1f; 摘要&#xff1a;海尔是当前国内非常受欢迎的品牌&#xff0c;在当下飞速发展的时代&#xff0c;海尔电视也与时俱进。现在的海尔电视不仅仅只限于观看&#xff0c;还可以连接手机&#xff0c;更可以电视投屏。那你知道海…

海尔微型台式计算机重装系统,海尔台式电脑bios设置u盘启动教程

海尔是全国知名品牌&#xff0c;相信用户朋友们多少都有点了解海尔这个老品牌&#xff0c;可是最近有用户想用u盘给海尔电脑重装系统,但是不知道海尔电脑bios设置u盘启动方法&#xff0c;其实海尔台式电脑bios设置启动项很简单,装机吧小编写了一份海尔台式机bios设置u盘启动的方…

海尔台式计算机配置,海尔台式机bios设置图解方法

海尔是全国知名品牌&#xff0c;相信用户朋友们多少都有点了解海尔这个老品牌&#xff0c;可是最近有用户想用u盘给海尔电脑重装系统,但是不知道海尔电脑bios设置u盘启动方法&#xff0c;其实海尔台式电脑bios设置启动项很简单,接下来是小编为大家收集的海尔台式机bios设置图解…

海尔电视显示连接不上服务器,海尔电视怎么连接手机

导言&#xff1a;你知道海尔电视怎么连接手机吗&#xff1f; 摘要&#xff1a;随着互联网科技的飞速发展&#xff0c;智能化已普遍运用到人们的生活中。电视产业也随着科技的发展飞速成长&#xff0c;变得越来越智能化。不但可以看电视&#xff0c;还可以连接网络、连接手机&am…

海尔微型计算机机箱如何拆解,海尔t628拆机详解

电脑在我们这个时代已经是我们生活的必需品了,不管是在家里的生活方面还是在工作方面,电脑都能给我们带来极大的帮助。可是电脑毕竟只是一部机器,机器就避免不了出现问题的时候,有一些小问题我们又不想拿到外面去给别人修,可是自己动手又怕把电脑给弄坏了,这真是一个很尴…

新书上市|一位家长的忠告:长大后不成才的孩子,父母都忽视了这个点!

不能因为孩子好像没有才能而早早放弃&#xff0c;而是应该精心养育。我相信&#xff0c;从“培养各方面都很均衡的人”的角度来看&#xff0c;这才是教育的出发点。 并非所有才能都是与生倶来的。不过&#xff0c;遗传确实会有所影响。 调查遗传影响的传统方法是双生子研究。该…

教育 - 幼儿教育

幼儿教育 教育参考资源品牌简介BBunion金宝贝美吉姆红黄蓝小马快跑七田真积木宝贝东方爱婴亲亲袋鼠运动宝贝蒙特梭利 教育参考资源 上海学前教育网 品牌简介 BBunion 简介 &#xff08;1&#xff09;0-3岁 性格教育品牌&#xff0c;沿用德国、犹太人早期家庭教育智慧 &…

[ZT]精彩的国外育儿教育读本,图文并茂

真是太有趣了&#xff01;外國人對新爸新媽的育兒教育如此圖文並茂&#xff0c;相比之下&#xff0c;中國人的古板和拘謹顯得更加乏味與無趣&#xff0c;看看吧&#xff0c;真是寓教於樂的好東西。 測試奶水溫度 讓寶寶安靜下來 抱起寶寶 看小寶寶尿褲是干還是濕 包裹小寶寶 真…

三名学霸与计算机的缘,这三类家庭与学霸无缘,不是父母不用心,错在教育方式...

文/可馨育儿 教育孩子是一件苦中带乐的差事。父母要很完美、耐心、有教养、不暴躁&#xff0c;很多父母都是有缺点的&#xff0c;怀孕时宝妈从书中学育儿知识&#xff0c;想着后面如何与孩子相处&#xff0c;如何教育孩子&#xff0c;事实上&#xff0c;并不是你想这样做就能做…

文山计算机网络系统安装,文山智慧教育电脑版

文山智慧教育云网查成绩平台是一个可以在电脑上查分、学习的教育软件。提供了海量课程知识&#xff0c;实现了家校互联、成绩查询、网上教学等操作功能。目前&#xff0c;大家可以借助于安卓模拟器在pc设备上运行使用。 平台简介 文山智慧教育云平台依托智慧校园和无线4G网络全…