什么是MCMC,什么时候使用它

MCMC只是一种从分布中抽样的算法。这个术语代表“马尔可夫链蒙特卡罗”,因为它是一种使用了“马尔可夫链”的“蒙特卡罗”(即随机)方法。MCMC只是一种蒙特卡罗方法。

为什么我要从分布抽样呢?

从分布抽样是解决一些问题的最简单的方法。

也许在贝叶斯推断中最常见的方式是使用MCMC来从某些模型的后验概率分布中抽取样本。有了这些示例,你就可以问这样的问题:“什么是参数的平均值和可信区间?”。

例如,假设你有合适的参数模型的后验概率密度是某个函数f(x,y)。然后,计算参数 x的平均值,你可以这样计算

你可以简单地读作“x乘以参数(x,y)的概率,积分在x和y可能采用的所有可能值上。”

另一种计算这个值的方法是模拟观察值K ,,从f(x,y)计算样本平均值为

其中x(j)为第j个样本的x的值。

如果这些样品是分布的独立样本,那么随着k→∞,x的估计平均数会收敛于真平均数。

假设我们的目标分布是一个正态分布,平均数m和标准偏差S。显然,这种分布的平均值是m,让我们试着通过从分布中抽取样本来显示。

举一个例子,估计一个平均值m和标准偏差S的正态分布的值(在这里,我只会使用与普遍的常态相对应的参数):


我们可以使用 rnorm 函数很容易地从这个分布中抽样:

样本的平均值与真平均数(零)非常接近:


事实上,在这种情况下,n个样本的估计的期望方差是1/n,所以我们预期最值位于真平均数为10000点的

中。


此函数计算累积平均数(即元素1,2,…,K的和除以K)。

这里是收敛到接近于真平均值(红线为0)。


将X轴变换到对数刻度上,并显示另外30个随机方法:


如何得出结果?考虑积分

如果这可以分解成函数f(x)和概率密度函数P(x)的乘积,则

注意,右边仅仅是期望值E[f(x)]。根据大数定律,当样本量增长到无穷大时,期望值是样本均值的极限。因此,我们可以近似E[f(x)]为

你可以用这种方法做很多类似的事情。例如,如果你想在估计值附近画一个95%的可信区间,你可以通过求解a来估计它的底部分量。或者,你可以从你的一系列采样点中取样本分位数。

下面是分析地计算概率密度为2.5%的点:


在这种情况下,我们可以直接使用积分来估计(使用上述参数)


并且用Monte Carlo积分估计点:


请注意,这有一个错误:


但当样本大小趋于无穷大时,这将收敛。如果我们重复采样100次,我们会得到一系列估计,其具有与平均值周围的误差大约相同量级的误差:


仍然不相信?

在贝叶斯框架中,你将计算出在所有其他参数中你感兴趣的参数的临界分布。如果你有其他50个参数,这是一个很难的积分!

为什么这是很难的,考虑参数空间区域中包含“有趣”的参数值:即参数值都明显大于零的概率。

为了说明这个问题,

l.假设一个半径为R的圆的和一个边长为2R的正方形;空间的“有趣的”区域为,所以我们有一个很好的机会,随机选择点在圆内。

2.在一个边长为2R的立方体内有一个半径为R的球体,球体的体积是和立方体的体积,所以的体积是“有趣的”。

3.d作为问题的维度,增加(使用超立方体中的超球面)这个比值为


因此,假设一个有零协方差项,在原点的平均值和单位方差的多元正态分布。这些在原点有具有不同的模式(最大值),并且点和模式处的概率比为

关于这个函数,任何大的值会导致概率低。所以,随着问题的维数增加,有趣的空间变得非常小。考虑在区域内采样,并且计数10,000个采样点中有多少具有大于1/1000的相对概率,其像超球面情况一样下降。


为什么“正常统计”不使用蒙特卡罗方法?

对于传统讲授的统计中的许多问题,你可以最大化或最大化一个函数而不是从分布中取样。所以我们使用一些函数来描述可能性,并最大限度地提高它(最大似然推理),或一些函数计算平方和和最小化。

为了避免必须从分布中抽样,在概率估计的误差估计倾向于是渐近的大数据估计或者可能基于Bootstrap估计。

然而,蒙特卡罗方法在贝叶斯推断中所起的作用与频率统计中的优化程序相同;它只是做的推理算法。

马尔可夫链蒙特卡罗

定义

表示在t时间一些随机变量的值。马尔可夫链起始于产生一系列样点,接着一系列随机步骤。

马尔可夫链满足马尔可夫属性。马尔可夫属性是已知现在状态的条件下,将来所处的状态与过去状态无关,即“遗忘性”;基本上不管你如何达到某个状态x,x的转移概率不变:

从一个步骤到下一个步骤的转换是由转移核描述,它可以由状态i到状态j的转变的概率(或连续变量的概率密度)描述为

表示 状 态 j 在 t 时间(步骤 ) 的链 的 概率 , 并且定义 为 可能 的 状态的概率 的向量。然后,给出 , 我们利用 Chapman-Kolmogorov 方程计算 这 个概率是 我们在状态 k 乘以从 k 到 i 的 转变 的概率,在所有可能的状态 k上求和。 设 P是概率 转移矩阵 ——矩阵的第i,j元素是P(i→j),并且将上述等式重写为 

我们可以轻松地迭代这个方程:

平稳分布

如果有一些矢量满足

那么$\vec\pi^$是这个马尔可夫链的平稳分布。直观地,认为这个系统将设置的状态的最终特征集;运行足够长的时间,该系统会“遗忘”它的初始状态,则这个向量的第i个元素是这个系统将在状态i的概率。

如果这个过程是不可约的和非周期性的,马尔可夫链将会有一个平稳分布。

在数学上,是特征值为1的左特征向量。

这里有一个快速的定义,使事情更具体(但请注意,这无关MCMC本身–这只是对马尔可夫链的观点!)假设我们有一个三态马尔可夫过程。设P为链的概率转移矩阵:


请注意,P行的共计为一:


入口P[i,j] 给出了从状态i到状态j的概率(所以这就是上述的 P(i→j))。

注意,与行不同,列不一定共计为1:


这个函数取一个状态向量x(其中x[i]是处于状态i的概率),并通过乘以转移矩阵P来迭代它,使系统前进n个步骤。

从状态1中的系统开始(所以x是向量[ 1,0,0 ],指示存在处于状态1的100%概率,并且没有处于任何其他状态的机会),并且迭代10个步骤 :

同样,对于其他两个可能的起始状态:

这表明在平稳分布上的收敛性。

这意味着不管起始分布如何,不管它在哪里开始,在大约10次或更多次迭代之后,链处于状态1的概率为32%。

我们可以用R的特征函数来提取系统的主导特征向量(这里的t()转置矩阵得到左特征向量)。

然后添加点到之前显示我们接近收敛的图中:


根据特征向量的定义,乘以特征向量的转移矩阵返回特征向量本身:


(严格地说,这应该是由V相乘的特征值,但这些矩阵的主特征值总是1)。

在这里运行的函数用一个状态(这一次,只是一个整数代表其中系统的状态1,2,3),如上相同的转移矩阵,和一些运行的步骤。每个步骤,查看可能转换到的地方,并选择1(这使用R的样本函数)。

这是100步左右的链:


绘制我们在每个状态随着时间的推移的时间分数。


运行这步再长一点(5000步)


存在稳定分布的充分(但不是必要的)条件是细致平衡,其为:

这意味着链是可逆的。这种情况意味着一个平稳分布存在的原因是

将状态j的细致平衡方程的两侧求和

左边的项等于的第k个元素,右边的项可以作为因子

然后,因为因为P是一个转移概率函数,由总概率定律决定,概率为1)所以右边是

,所以我们有

其适用于所有k,所以

马尔可夫链具有平稳分布,如果我们运行它们足够长的时间,我们可以看看链在哪里花费时间,并得到该平稳分布的合理估计。

Metropolis算法

这是最简单的MCMC算法。我们要做的是具有一些我们想要采样的分布,并且我们将能够评估与目标分布的概率密度成比例的函数f(x)(也就是说,如果 p(x)是概率密度函数本身,,即f(x)= p(x)/ Z,其中Z =∫f(x)dx。注意,x可以是向量或标量。

我们还需要一个概率密度函数P,我们可以从中抽取样本。 对于最简单的算法,建议分布是对称的,即P(x→x’)= P(x'→x)。

该算法如下进行。

1.在一些状态下启动t。

2.创建新状态x'

3.计算“接受概率”α= min[1,f(x’)f(x)]

4.从[0,1]中绘制一些均匀分布的随机数u; 如果u<α,接受该随机数,设置$x{t+1} = x^\prime。否则拒绝它并设置x{t+1}=x_t$。

注意,在上面的步骤3中,未知的归一化常数丢失,因为

这将生成一系列样本$ {x0,x1,\ldots}$。在所提出的样本被拒绝的情况下,相同的值将存在于连续样本中。

这些不是来自目标分布的独立样本,它们是依赖样本。也就是说,样本取决于,等等。 然而,因为链接近稳定分布,所以只要我们采样足够的点,这种依赖就没有关系。

MCMC采样在1d(单参数)问题

这是从中抽样的目标分布,它是两个正态分布的加权和。 概率密度函数是

这是一个人为的例子,但是这样的分布不是完全不可能的,并且可能出现在从混合物中采样东西时。

这里有一些参数和目标密度的定义。

这里是概率密度绘制在“重要”领域的一部分

让我们定义一个非常简单的建议的算法,从一个正态分布为中心的电流点的标准偏差为4

这实现了核心算法,如上所述:

这只是运行MCMC的一些步骤。 它将在点x处开始返回一个具有nsteps行的矩阵,并且具有与x相同的列数。 如果在标量x上运行,它将返回一个向量。

我们选择一个地方开始(-10好了)

这里是马尔可夫链的前1000步,目标密度在右边:


即使只有一千个(非独立的)样本,我们开始类似的目标分布。


运行更长时间会看起来更好一些:


现在,运行不同的建议机制——一个具有非常宽的标准偏差(33个单位),另一个具有非常小的标准偏差(3个单位)。

这里是和上面相同的图——注意三个轨迹移动的不同的方式。

灰线轨迹相当自由地弹跳。

相反,红色轨迹意味着它倾向于长期呆在一起的时间。

蓝色轨迹倾向于小移动,它对于大多数轨迹随机行走而移动。 它需要数百次迭代甚至达到大部分的概率密度。

你可以在后续参数之间的自相关中看到不同建议步骤的效果——这些图表示不同滞后的步长之间的自相关系数的衰减,蓝色线表示统计独立性。


由此,可以计算独立样本的有效数量:

两个“混合”的链比第一个更差。

这更清楚地显示了链运行更长时间会发生什么:

显示100,1,000,10,000和100,000步:


MCMC在二维中

这是一个给定装置(分布的中心)和方差 - 协方差矩阵的向量的多变量法向密度的函数。

如上所述,将目标密度定义为两个mvns的总和(此时未加权):


这里有一系列不同的策略——我们建议同时在两个维度上的移动,或者我们可以独立地沿着每个轴进行采样。 这两种策略都会奏效,但是它们的组合速度会有所不同。

假设我们实际上不知道如何从mvn中抽样,让我们做一个方案,在两维分布均匀,从宽度为d的正方形采样。


绘制样品

将抽样分布与已知分布进行比较:


然后,我们可以轻松地用难以直接做的样本做事情。 例如,参数1的边际分布是什么:


(这是第一参数采用的分布,对第二参数可能采用的所有可能的值求平均,由它们的概率加权)。

正确地计算这一点是很复杂的,我们需要将第一个参数的第二个参数的所有可能的值合并到第一个值中。然后,因为目标函数本身不是归一化的,所以我们必须将它除以第一维上的积分值(这是分布下的总面积)。



文章原标题《Markov Chain Monte Carlo》,作者:Rich FitzJohn

机器学习算法——马尔可夫链蒙特卡罗(MCMC)相关推荐

  1. 如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?

    原文链接:http://tecdat.cn/?p=2687 什么是MCMC,什么时候使用它? MCMC只是一个从分布抽样的算法. 这只是众多算法之一.这个术语代表"马尔可夫链蒙特卡洛&quo ...

  2. 马尔可夫链蒙特卡罗MCMC模型

    什么是MCMC,什么时候使用它? MCMC只是一个从分布抽样的算法. 这只是众多算法之一.这个术语代表"马尔可夫链蒙特卡洛",因为它是一种使用"马尔可夫链"(我 ...

  3. R语言中实现马尔可夫链蒙特卡罗MCMC模型

    什么是MCMC,什么时候使用它? MCMC只是一个从分布抽样的算法. 这只是众多算法之一.这个术语代表"马尔可夫链蒙特卡洛",因为它是一种使用"马尔可夫链"(我 ...

  4. 简单易学的机器学习算法——Metropolis-Hastings算法

    在简单易学的机器学习算法--马尔可夫链蒙特卡罗方法MCMC中简单介绍了马尔可夫链蒙特卡罗MCMC方法的基本原理,介绍了Metropolis采样算法的基本过程,这一部分,主要介绍Metropolis-H ...

  5. 【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享

    原文链接:http://tecdat.cn/?p=2687 在贝叶斯方法中,马尔可夫链蒙特卡罗方法尤其神秘(点击文末"阅读原文"获取完整代码数据). 它们肯定是数学繁重且计算量大的 ...

  6. 马尔可夫蒙特卡罗 MCMC 原理及经典实现

    我们在做机器学习.深度学习或自然语言处理等项目时,经常采用什么方法采样呢?大家马上会想到吉布斯 Gibbs 采样,今天我们来分享一种比较实用的采样方法:马尔可夫蒙特卡罗方法,吉布斯采样是其中的一种. ...

  7. python做马尔科夫模型预测法_用Python实现马尔可夫链蒙特卡罗

    摘要: 本文通过用Python中的马尔可夫链蒙特卡罗实现了睡眠模型项目,并教会如何使用MCMC. 在过去的几个月里,我在数据科学领域里遇到一个术语:马尔可夫链蒙特卡罗(MCMC).在博客或文章里,每次 ...

  8. python马尔可夫链_用Python实现马尔可夫链蒙特卡罗

    摘要: 本文通过用Python中的马尔可夫链蒙特卡罗实现了睡眠模型项目,并教会如何使用MCMC. 在过去的几个月里,我在数据科学领域里遇到一个术语:马尔可夫链蒙特卡罗(MCMC).在博客或文章里,每次 ...

  9. 马尔可夫链蒙特卡罗算法(MCMC方法)

    MCMC方法是什么 具体而言,假设我们要计算积分 μ = ∫ S h ( θ ) π ( θ ∣ x ) d θ \mu=\int_Sh(\theta)\pi(\theta|x)d\theta μ=∫ ...

最新文章

  1. php_yaf 安装
  2. java 中变量的存储与引用
  3. Java语言特性运用:各种Java语法特性是怎样被Spring各种版本巧妙运用的?
  4. python自带的shell、其性能优于ipython_python3.4 shell
  5. 阿里第一颗芯片问世,平头哥发布最强AI芯片含光800
  6. mysql简单语句_MySQL 简单的语句
  7. svg html转换器,html – 将嵌入的SVG转换为PNG到位
  8. 通信工程专业英语词汇 通信工程 专业英语
  9. 怎么利用计算机计算潮流计算,计算机潮流计算.ppt
  10. 费马大定理与费马小定理
  11. 企业邮箱怎么收发邮件,怎么保护公司邮件安全?
  12. 制作一组创意的食物图标
  13. 国际学术论文写作个人总结-引言(Introduction)部分
  14. sqlserver加上百分号_用一条sql语句显示数据百分比并加百分号
  15. Windows Azure Storage 论文阅读
  16. springboot 在线程中注入bean,解决注入bean为null的问题
  17. python 远程控制实例
  18. 从妓到后——史上最令男人动心的女人
  19. Bootstrap(well页数标签角标巨幕)
  20. codeforces 314 (Div 1) 题解

热门文章

  1. 神话与历史中的吸血鬼
  2. Java多线程案例--生产者和消费者模型(送奶人和喝奶人的故事!)
  3. “errmsg“ : “not master and slaveOk=false“_Mongo集群没有primary但有secondary时连接不上且不能读数据
  4. ios-app杀死状态下响应推送
  5. 2021年全面攻读人物传记【书单】(持续更新)
  6. vc6.0,vs2005下插入excel表格
  7. Kubernetes K8s 结合国内外文章解决 The kubelet is not running
  8. 高职计算机教CAD,高职城乡规划专业“Auto CAD计算机辅助设计课程改革设计
  9. 【智能硬件】Jetson nana 扩展显存(内存)
  10. ready和onload的区别