但MCMC很难理解。每当我读到它时,我都注意到症结通常隐藏在数学中。 我们不得不花费很多时间来理解这个概念。 本博文旨在简单解释MCMC方法,并了解它们的用途。 MCMC由蒙特卡洛和马尔可夫链两个术语组成。 蒙特卡洛模拟 简单来说,我们可以将蒙特卡罗方法看作简单的模拟。 方法的名称来自摩纳哥的蒙特卡洛赌场。许多纸牌游戏需要赢得经销商的概率。 有时计算这种概率可能在数学上很复杂或非常棘手。但我们总是可以运行计算机模拟来模拟整个游戏多次,并将概率视为获胜次数除以所玩游戏次数。 所以你需要了解蒙特卡罗方法。 是的,它只是一个带有花式名称的简单模拟技术。 马可夫链因此,当我们获得MCMC的第一部分时,我们还需要了解什么是。但是,在跳到Markov Chains之前,让我们先了解一下Markov Property。
不要混淆。系统的具体示例是从热到冷到中等状态的天气。或者另一个系统可能是股票市场,从熊市跳到牛市到停滞不前的状态。 马尔科夫属性说,给定一个Xn处于特定时间点Xn+1状态的过程,k的概率,其中k是过程可以跳转到的M个状态中的任何一个,只取决于它在哪个状态。给定的时刻。而不是它如何达到目前的状态。 数学上说:
在实际的事物计划中也是有道理的。 如果一个过程展示马尔可夫属性,那么它被称为马尔可夫过程。 现在,为什么马尔可夫链很重要? 由于其固定分布,这很重要。 什么是固定分布? 我将尝试通过实际计算下面的例子来解释静态分布。假设你有一个像马克夫一样的股票市场流程。 你有一个转移概率的矩阵 过渡概率Q 其中定义了从状态Xi到Xj的概率。在上面的转移矩阵Q中, 考虑到当前状态,下一个状态将是'牛市'的概率是'牛市'= 0.9 给定当前状态,下一个状态将'承受'的概率为'牛市l'= 0.075 现在,我们从一个特定的状态开始。让我们从熊市状态开始。我们可以用矢量形式将我们的状态定义为[bull,bear,stagnant]。所以我们的起始状态是[0,1,0] 我们可以通过将当前状态向量与转移矩阵相乘来计算下一状态的概率分布。 看看概率如何加起来1.并且可以找到下一个状态分布 等等。最终,你将达到一个静止的状态,我们将会聚合在一起: 对于上述转移矩阵Q,静态分布s是: 可以通过编程方式获得固定分发: Q = np.matrix([[0.9,0.075,0.025],[0.15,0.8,0.05],[0.25,0.25,0.5]]) init_s = np.matrix([[0,1,0]])epsilon = 1,epsilon> 10e-9: next_s = np.dot(init_s,Q) epsilon = np.sqrt(np.sum(np.square(next_s - init_s))) init_s = next_s print(init_s) ---------------------------------------------- -------------------- matrix([[0.62499998,0.31250002,0.0625]]) 你也可以从任何其他状态开始; 你将达到相同的固定分布。如果要查看,请更改代码中的初始状态。 现在我们可以回答这个问题 - 为什么静止分布很重要? 静态状态分布很重要,因为它允许您在随机时间定义系统的每个状态的概率。 对于这个特殊的例子,你可以说62.5%的市场时间将处于牛市状态,31.25%的时间是熊市,6.25%的时间会停滞不前。 随机漫步直观地,您可以将其视为链上的随机游走。你处于一个状态,你通过在给定当前状态的情况下看到下一个状态的概率分布来决定下一个状态。基于节点概率,我们可能比其他节点更频繁地访问某些节点。 这就是谷歌在早期互联网时代解决搜索问题的方式。问题是根据页面重要性对页面进行排序。谷歌使用Pagerank算法解决了它。 在Google Pagerank算法中,你可能会将状态视为页面,并将静态分布中页面的概率视为其相对重要性。 这是很多信息,我们还没有开始谈论MCMC方法。我们现在可以继续谈论真正的主题了。 那么什么是蒙特卡罗马尔可夫链(MCMC)?在回答关于MCMC的这个问题之前,让我问一个问题。我们都知道beta发行版。我们知道它的pdf功能。但我们可以从这个分布中抽取样本吗?你能想到办法吗? MCMC为我们提供了从任何概率分布中抽样的方法。 为什么要从分布中抽样? 有时在进行推理时获得最大后验(MAP)估计是不可行的。在进行预测时,我们使用后验均值作为估计而不是MAP参数。我们可以通过采用后验分布的样本来估计后验平均值。名为Prophet的时间序列包在推理时使用MCMC采样来生成估计值。如果还不明白,请不要担心。 根据: 马尔可夫链蒙特卡罗(MCMC)方法是一类用于从概率分布中采样的算法,其基于构建具有期望分布作为其静态分布的马尔可夫链。然后将多个步骤之后的链状态用作所需分布的样品。样品质量随步骤数的增加而提高。 让我们用一个例子解释一下: 假设我们想要从进行抽样。beta版的概率密度函数是: 其中C是归一化常数(我们不需要从分布中取样,我们将在后面看到)。 如果不是难以处理的话,这对于Beta发布来说是一个棘手的问题。 实际上,你可能需要使用更难的分布函数,有时不会知道规范化常量。 MCMC方法通过为我们提供可以创建马尔可夫链的算法使我们的生活更轻松,马尔可夫链具有Beta分布作为其静态分布,因为我们可以从均匀分布(相对容易)进行采样。 如果我们从一个随机状态开始并基于某种算法反复遍历到下一个状态,我们将最终创建一个马尔可夫链,其Beta分布作为其固定分布,并且我们在很长一段时间后所处的状态可以用作来自Beta Distribution的样本。 一种这样的MCMC算法是 Metropolis-Hastings算法爬山 直觉:首先,目标是什么? 直观地说,我们想要做的是在一些(块状)表面(我们的马尔可夫链)上走动,使得我们在每个位置花费的时间量与该位置处的表面高度成比例(我们期望的)概率密度函数,我们需要从中抽样)。 因此,例如,我们想要在海拔100米的山顶上花费两倍的时间,就像在附近的海拔50米的山上一样。好的是,即使我们不知道表面上的点的绝对高度,我们也可以做到这一点:我们必须知道的是相对高度。例如,如果一个山顶A的高度是山顶B的两倍,那么我们想要花费两倍于我们在B处花费的时间。 有更复杂的方案来提出新的地点和接受它们的规则,但基本的想法仍然是: (1)选择一个新的'建议'位置; (2)弄清楚该位置与当前位置相比有多高或多低; (3)以符合与位置高度成比例的花费时间的总体目标的方式概率地保持或移动到该位置。 MCMC的目标是从一些概率分布中抽取样本,而不必知道它在任何点的确切高度(我们不需要知道C)。 如果正确设置了'游荡'过程,则可以确保达到此比例(在花费的时间和分配的高度之间)。 算法: 现在让我们更正式地定义问题。 设s =(s1,s2,...,sM)是所需的平稳分布。我们想要创建一个具有这种固定分布的马尔可夫链。我们从具有M个状态的任意马尔可夫链开始,具有转移矩阵P,因此pij表示从状态i到j的概率。 直觉上我们知道如何在这个马尔可夫链周围徘徊,但这个马尔可夫链没有所需的固定分布。
为此,我们: 1. 从一个随机的初始状态i开始。 2. 通过查看转换矩阵P的第i行中的转移概率,随机选择新的Proposal State。 3. 计算一个名为Acceptance Probability的度量,定义为:aij = min(sj.pji / si.pij,1)。 4. 现在翻转一个以概率aij落在头上的硬币。如果硬币出现在头上,接受提议,即转到下一个状态,否则拒绝提议,即保持当前状态。 5. 重复很长一段时间 经过很长一段时间,这条链将会收敛并具有静止的分布。然后我们可以使用链的状态作为来自任何分布的样本。 在这样做以对Beta分布进行采样时,我们使用PDF(概率密度函数)的唯一时间是找到接受概率,并且在此,我们将sj除以si,即,归一化常数 C 被取消。 MCMC采样器现在让我们继续讨论Beta Distribution的采样问题。 Beta分布是[0,1]上的连续分布,它可以在[0,1]上具有无限状态。 让我们假设在[0,1]上具有无限状态的任意马尔可夫链P具有转移矩阵P,使得pij = pji =矩阵中的所有条目。 我们不需要Matrix P,我们稍后会看到,但我想让问题描述尽可能接近我们建议的算法。
这简化为: 既然pji = pij,那么
结果这个理论足够了,让我们继续使用python来创建我们的Beta采样器。 让我们根据实际的beta分布检查MCMC Sampled Beta分布的结果。 我们可以看到,我们的采样β值与β分布非常相似。因此我们的MCMC Chain已达到静止状态。 我们确实在上面的代码中创建了一个beta采样器,但是同样的概念普遍适用于我们想要采样的任何其他发行版。 结论在本质上,MCMC方法可能很复杂,但它们为我们提供了很大的灵活性。可以使用MCMC采样对任何分布函数进行采样。它们通常用于在推理时间对后验分布进行采样。 你还可以使用MCMC 解决大状态空间的问题。例如,背包问题或解密。 |
|
来自: 挑燈看劍r7wtm5 > 《科学》