当前位置 : 主页 > 网络编程 > 其它编程 >

马尔可夫链蒙特卡洛法java_一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南...

来源:互联网 收集:自由互联 发布时间:2023-07-02
作者|BenShaver翻译|刘畅编辑|Donna大多数时候贝叶斯统计在结果在最好的情况下是魔法在最糟糕时是一种完全主观的废话。在用到贝叶斯方法的理 作者 | Ben Shaver 翻译 | 刘畅 编辑 | Donna 大
作者|BenShaver翻译|刘畅编辑|Donna大多数时候贝叶斯统计在结果在最好的情况下是魔法在最糟糕时是一种完全主观的废话。在用到贝叶斯方法的理

作者 | Ben Shaver

翻译 | 刘畅

编辑 | Donna

大多数时候贝叶斯统计在结果在最好的情况下是魔法在最糟糕时是一种完全主观的废话。在用到贝叶斯方法的理论体系中马尔可夫链蒙特卡洛方法尤其神秘。

这篇文章将介绍马尔可夫链蒙特卡洛方法极其背后的基本数学推理。

首先什么是马尔可夫链蒙特卡洛(MCMC)方法呢

最简短的回答就是

“MCMC就是一种通过在概率空间中随机采样来近似感兴趣参数的后验分布的方法”

在这篇文章中我不用任何数学知识就可以解释上面这个简短的答案。

贝叶斯理论体系基本术语

首先是一些术语。

感兴趣的参数只是用来抽象我们感兴趣的现象的一些数字。通常我们会使用统计的方法来估计这些参数。例如如果我们想了解成年人的身高那么我们需要的参数可能就是以英寸为单位的平均身高。

分布就是参数的各个可能值和我们能观察到每个参数的可能性的数学表示。

最好的例子就是钟形曲线

6748b6bfdba17f1426579b9ed7cd2072.jpg

在贝叶斯统计方式中分布还有另一个解释。贝叶斯不仅仅代表参数的值和每个参数的真实值有多大而是认为分布描述了我们对参数的确信度。因此上面的钟形曲线可以表明我们非常确定参数的值接近于零同时我们认为真实值高于或低于该值的可能性是相等的。

事实上人的身高是遵循一个正态分布的所以我们假设平均人体高度的真实值遵循如下的钟形曲线

eed30c9fcb868fcaee95436eea88b071.jpg

显然这个图表显示这个人群以巨人的身高生活了很多年因为据调查所知最有可能的平均成年身高是62英寸。

让我们想象某人去收集了一些数据然后他们观察到了一批5英寸和6英寸之间的人。 我们可以用另一个正态分布曲线来表示这些数据这个曲线显示了哪个人体平均身高值最能解释数据

f975cfbcade4225e69e478b7307db5b7.jpg

在贝叶斯统计中表示我们对参数确信度的分布被称为先验分布因为它在看到任何数据之前捕捉到了我们的知识。

似然分布以参数值范围的形式总结了数据可以告诉我们什么而参数值中的每个参数解释了我们正在观察的数据的可能性。估计最大似然分布的参数值就是回答了这个问题什么样的参数值能使分布最有可能观察到我们观察到的数据在没有先验信息的情况下我们可能会就此打住了。

然而贝叶斯分析的关键是将先验信息和似然分布结合起来去确定后验分布。这告诉我们在有先验数据的情况下哪些参数值能够最大化观察到我们指定数据的概率。在上面的例子中后验分布应该是这样的

05309530530ba2279f13eabb59b559fa.jpg

在上面的图中红线表示后验分布。你可以把它看作一种先验和可能性分布的平均值。由于先验分布较短且较为分散所以它代表了一组关于平均人体身高真实值“不太确定”的概率。 同时可能性分布在相对较窄的范围内就可以总结数据因此它代表了对真实参数值“更确定”的概率。

当先验和可能性结合在一起时数据(可能性分布表示)弱化了个体在巨人中长大的可能性。 尽管那个人仍然认为人的平均身高比数据告诉他的稍高一些但是他最相信的还是数据。

在两条钟形曲线的情况下求解后验分布是非常容易的。 有一个简单的方程来结合这两者。 但是如果我们的先验分布和可能性分布不那么好呢

有时使用不是常规形状的分布来模型化我们的数据或我们先验信息是最准确的。如果我们的可能性分布用两个峰值来表示更好而且由于某种原因我们想要解释一些非常古怪的先验分布时该怎么办呢我已经通过手工绘制了一个丑陋的先验分布

3614a56dff44eae30e8dc33ccd7feb6f.jpg

在Matplotlib中呈现的可视化使用MS Paint进行了增强

如之前所讲有一些后验分布可以给出每个参数值的可能性。但是很难确定分布曲线的具体样子而且通过分析也无法解决。

因此进入MCMC方法。

MCMC方法

MCMC方法允许我们估计后验分布的形状以防我们无法直接计算。事实上MCMC就是马尔可夫链蒙特卡洛方法。为了理解它们是如何工作的我将首先介绍蒙特卡洛估计然后是讨论马尔可夫链。

蒙特卡洛估计

蒙特卡洛估计是一种通过重复生成随机数来估计固定参数的方法。在通过生成随机数并对其进行一些计算时有时直接计算这个参数不现实时蒙特卡洛估计可以提供一个参数的近似值。

假设我们想估计下面圆圈的面积

3f7bef2c63459ab1f2bf564cdb2586bb.jpg

由于圆是在边长为10英寸的正方形内因此可以容易地计算出它的面积为78.5平方英寸。 另一种方式我们可以在正方形内随机抽取20个点。然后我们计算在圆内的点的比例并乘以正方形的面积。而这个数字是一个非常好的圆圈面积的近似值。

1cf348c373e5e132581d9b70b385ebf3.jpg

由于20个点中有15个都位于圆内所以看起来圆的面积大约是75平方英寸。这个结果对于只有20个随机点的蒙特卡罗模拟方法来说也不算太坏。

现在想象一下我们想要计算蝙蝠侠曲线方程(Batman Equation)绘制的形状的面积

13cf4ab0e4de94f33246279a6e4e9e5a.jpg

这是一个我们从来没有学过的方程的形状因此找到蝙蝠信号的区域非常困难。不过通过在包含蝙蝠形状的矩形内随机地打点蒙特卡罗模拟方法就可以非常容易地找到该形状面积的近似值

蒙特卡罗模拟不仅仅是用于估计复杂形状的面积。通过生成大量的随机数它们可以用来模拟非常复杂的过程。在实践中习惯用该方法来预测天气或者估计赢得选举的可能性。

马尔可夫链

理解MCMC方法的第二个要素就是马尔可夫链。 这个就是事件相互关联概率的序列。每个事件来自一组结果而其中的每个事件的结果根据一组固定的概率来确定下一个事件的结果。

马尔可夫链的一个重要性质就是它们是无记忆的在当前状态下你可能需要一切可用的事件来预测下一个事件并且不能有从旧事件来的新信息。像Chutes和Ladders这样的游戏展现了这种无记忆性或者叫马尔科夫属性。

但是在现实世界中实际上很少有事件以这种方式工作。不过马尔可夫链是一种理解世界的有力方式。

在十九世纪钟形曲线被看作是自然界中一种常见的模式。(例如我们已经注意到人的身高分布是一个钟形曲线)。Galton Boards通过在装有钉子的木板上放置大理石来模拟重复随机事件的平均值重现了大理石分布的正态曲线

ad0d4ba1c12efcbd876fcb9ed9d49792.jpg

俄罗斯数学家和神学家帕维尔·涅克拉索夫(Peter Pavel Nekrasov)认为钟形曲线以及更一般的大数定律只不过是儿童游戏和琐碎谜题的产物因为它的假设是每个事件都是完全独立的。而涅克拉索夫认为现实世界中的事物是相互依存的比如人的行为所以现实中的事物并不符合好的数学模式或分布。

安德烈·马尔可夫试图证明非独立事件也有可能符合这种模式。他最著名的实验例子之一就是要从俄罗斯诗歌作品中计算数以千计的两个字符对。使用这些字符对他计算出了每个角色的条件概率。也就是说给定某个前面的字母或空格下一个字母就有可能是一个A一个T或一个空格。

使用这些概率马尔可夫能够模拟任意长的字符序列。这就是一个马尔可夫链。

尽管前几个字母很大程度上取决于起始字符的选择但是马尔可夫表明从长远来看字符的分布是一种模式。因此即使是相互依赖的事件如果它们受到固定概率的影响也是一致的。

举一个更有说服力的例子假设你住在一个有五个房间的房子里其中有一间卧室卫生间客厅饭厅和厨房。

让我们收集一些数据假设你在任何时间点所在的房间都是我们认为的下一个可能进入的房间。例如如果你在厨房你有30的机会留在厨房30的机会进入餐厅20的机会进入客厅10的机会去浴室有10的机会进入卧室。利用每个房间的进入的概率我们可以构建一个预测你下一个可能去的房间的马尔可夫链。

如果我们想要预测房子里某个人在厨房里待一小会儿后会去哪里那么马尔可夫链可以用于这一类预测。但是由于我们的预测只是基于一个人在家里的一个观察所以这类预测结果并不可靠。

例如如果有人从卧室走到浴室那么他们更有可能直接回到卧室而不是从厨房里出来。所以马尔可夫属性通常不适用于现实世界。

然而将马尔可夫链进行数千次迭代确实能够长期的预测你接下来可能会进入哪个房间。更重要的是这个预测并没有受到人们从哪个房间开始的影响直观地说这是有道理的为了模拟和描述他们可能长期或通常所在地在哪里某个时间点某人在家里的位置并不重要。

因此在一段时期内对随机变量建模并不合理的马尔可夫链方法却可以用来计算该变量的长期趋势。

MCMC方法

有了蒙特卡洛模拟和马尔可夫链的一些知识我希望MCMC方法的零数学解释是非常直观的。

回想一下我们试图估计我们感兴趣参数的后验分布即人均身高

10bca0e4be2b9cd227cc089710506bea.jpg

我不是一个可视化的专家我也没有把我的例子放在常识的范围之内我这个后验分布的例子严重地高估了人的平均身高。

我们知道后验分布在先验分布和似然分布范围内但是我们很难直接计算它。 使用MCMC方法我们就可以有效地从后验分布中抽取样本然后计算比如抽样样本的平均值。

首先MCMC方法考虑选择一个随机参数值。然后模拟会继续生成随机值(这是蒙特卡罗的一部分)但要根据一些规则来确定什么是一个好的参数值。这个诀窍就是对于一对参数值基于先验信息通过计算每个值在解释数据时的可能性有多大来计算哪个参数值更好。如果随机生成的参数值比最后一个参数值更好则以一定的概率值将其添加到参数值链中(这是马尔科夫链部分)。

分布中某个值的高度代表了观察该值的概率。因此我们可以想象我们的参数值(x轴)在y轴上呈现出高低概率的区域。对于单个参数MCMC方法是沿x轴开始随机采样

922bae6e062550d8a6166787e70ee8a3.jpg

红点是随机参数样本

由于随机样本受到固定概率的影响经过一段时间之后它们往往会在我们感兴趣参数概率最高的区域收敛

cdc5ea3d985d3614a5215e327676ecc1.jpg

蓝点只代表当预计会出现收敛时的随机样本。注意为了说明的目的我垂直叠加了点。

在数据收敛之后MCMC抽样产生一组来自后验分布的样本点。 在这些点周围绘制直方图并计算任何您喜欢的统计数据

90fd7c11ed1f57ceada36d32dcd965b3.jpg

根据MCMC模拟生成的样本集计算出的任何统计量就是我们对该真实后验分布统计量的最佳预测。

MCMC方法也可以用来估计多个参数的后验分布(比如说人的身高和体重)。

对于n个参数存在n维空间中的高概率区域这些区域中的某些参数值组可以更好地解释观察到的数据。 因此我认为MCMC是一种在概率空间内进行随机采样来接近后验分布的方法。

回想一下“什么是马尔可夫链蒙特卡罗方法”这个问题的简短答案。那就是

“MCMC就是一种通过在概率空间中随机采样来接近感兴趣参数的后验分布的方法”

原文链接https://towardsdatascience.com/a-zero-math-introduction-to-markov-chain-monte-carlo-methods-dcba889e0c50

【文章出处:香港站群服务器 http://www.558idc.com/hkzq.html 复制请保留原URL】
上一篇:表格内容识别(pythonopencv)(一)【9/8】
下一篇:没有了
网友评论