也许是这个概念,为什么要使用它,还有一个例子。
也许是这个概念,为什么要使用它,还有一个例子。
Answers:
首先,我们需要了解什么是马尔可夫链。考虑以下来自维基百科的天气示例。假设任何一天的天气只能分为两种状态:晴天和多雨。根据过去的经验,我们了解以下内容:
由于第二天的天气晴朗或阴雨,因此:
同样,让:
因此,它遵循:
可以将上述四个数字紧凑地表示为一个过渡矩阵,该过渡矩阵表示天气从一种状态迁移到另一种状态的概率,如下所示:
我们可能会问几个问题,其答案如下:
问题1:如果今天天气晴朗,那么明天可能是什么天气?
A1:因为我们不确定要发生什么,所以我们可以说的最好的情况是,有可能性可能是晴天,有可能性会下雨。10 %
问题2:从今天起两天怎么样?
A2:一日天气预报:晴天,下雨。因此,从现在起两天后:10 %
第一天可能是晴天,第二天也可能是晴天。发生这种情况的可能性是:。
要么
第一天可能会下雨,第二天可能会晴天。发生这种情况的可能性是:。
因此,两天内天气晴朗的可能性是:
同样,下雨的概率为:
在线性代数(转换矩阵)中,这些计算对应于从一个步骤到下一个步骤的转换中的所有排列(晴天到晴天(),晴天到多雨(),多雨到晴天()或雨到雨())及其计算的概率:S 2 R R 2 S R 2 R
在图像的下部,我们看到如何根据零时间(现在或下雨)的每个状态(晴天或阴雨)的概率(概率质量函数)来计算未来状态(或)的概率或)作为简单矩阵乘法。t + 2 P M F t 0
如果继续这样预报天气,您将注意到最终第天天气预报(其中非常大(例如))将满足以下“平衡”概率:ñ 30
和
换句话说,您对第天和第天的预测保持不变。此外,您还可以检查“平衡”概率是否不取决于今天的天气。如果开始时假设今天天气晴朗或阴雨,您将获得相同的天气预报。n + 1
上面的示例仅在状态转换概率满足多个条件的情况下才有效,在此我将不再讨论。但是,请注意此“不错”的马尔可夫链的以下特征(不错=转移概率满足条件):
不管初始的起始状态如何,我们最终都会达到状态的平衡概率分布。
马尔可夫链蒙特卡洛(Markov Chain Monte Carlo)利用以下功能:
我们想要从目标分布生成随机抽奖。然后,我们确定一种构造“好的”马尔可夫链的方法,以使其平衡概率分布成为我们的目标分布。
如果我们可以构建这样的链,那么我们可以从某个点任意开始,并多次迭代马尔可夫链(就像我们如何预测次天气)。最终,我们生成的抽奖会好像来自目标分布。
然后,我们在舍弃了一些初始绘图(即蒙特卡洛分量)之后,通过取绘图的样本平均值来估算感兴趣的数量(例如平均值)。
有几种方法可以构建“不错的”马尔可夫链(例如,吉布斯采样器,Metropolis-Hastings算法)。
我认为从(独立链)Metropolis-Hastings算法中可以得到一个很好而简单的直觉。
首先,目标是什么?MCMC的目标是从某种概率分布中抽取样本,而不必知道其在任何点的确切高度。MCMC实现此目的的方式是在该分布上“徘徊”,使得在每个位置花费的时间与分布的高度成比例。如果正确设置了“徘徊”过程,则可以确保达到此比例(花费的时间和分布高度之间)。
直观地讲,我们想要在某个(块状)表面上走动,以使我们在每个位置花费的时间(或抽取的样本数)与该位置处的表面高度成比例。因此,例如,我们希望在海拔100m的山顶上花费两倍的时间,比在海拔50m的附近山上花费更多的时间。令人高兴的是,即使我们不知道曲面上点的绝对高度,也可以执行此操作:我们只需要知道相对高度即可。例如,如果一个山顶A的高度是山顶B的两倍,那么我们想在A上花费的时间是在B上花费的时间的两倍。
Metropolis-Hastings算法的最简单变体(独立链采样)按以下方式实现:假设在每个(离散)时间步中,我们选择一个随机的新“建议”位置(在整个表面上均匀选择)。如果建议的位置比我们现在的位置高,请移至该位置。如果建议的位置较低,则以概率p移至新位置,其中p是该点的高度与当前位置的高度之比。(即,掷硬币的概率为p,获得正面;如果正面出现,则移至新位置;如果正面出现,则留在我们所在的位置)。记录您在每个时间步骤中所到过的位置,该列表(渐近地)将在表面的每个部分中花费的时间比例正确。
提议新地点的方案和接受规则更为复杂,但基本思想仍然是:(1)选择一个新的“提议”地点;(2)找出与您目前所在位置相比,该位置高低多少;(3)以尊重位置花费时间与位置高度成比例的总体目标的方式概率地留在该位置或移动到该位置。
这有什么用?假设我们有一个天气概率模型,该模型使我们能够评估A * P(天气),其中A是一个未知常数。(这种情况经常发生-许多模型很容易以无法确定A是什么的方式来表述)。因此,我们无法精确地评估P(“明天有雨”)。但是,我们可以运行一会儿MCMC采样器,然后询问:哪些样本(或“位置”)中的一部分最终处于“明天下雨”状态。这部分将是(基于模型的)概率天气预报。
我可能会说这样的话:
“每当我们要谈论概率时,我们实际上是在集成密度。在贝叶斯分析中,我们得出的许多密度在分析上都不是易处理的:您只能集成它们-如果可以将它们集成在一起-遭受了很多苦难,所以我们要做的是大量模拟随机变量,然后从模拟的随机数中找出概率。如果我们想知道X小于10的概率,我们可以算出模拟随机变量所占比例小于10,并将其用作我们的估计值。这是“蒙特卡洛”部分,它是基于随机数的概率估计值。有了足够的模拟随机数,该估计值非常好,但是仍然本质上是随机的。
“那么为什么要使用“马尔可夫链”?因为在某些技术条件下,您可以生成一个无记忆的过程(也称为马尔可夫过程),该过程具有与您要模拟的随机变量相同的极限分布。您可以迭代任何一个生成相关随机数(仅基于这些数字的当前值)的各种不同类型的模拟过程的数量,并且可以确保一旦汇总了足够的结果,您将得到一堆看起来像“好像”您已经设法以某种方式从想要了解的复杂分布中获取了独立样本。
“因此,例如,如果我想估计标准正态随机变量小于0.5的概率,则可以从标准正态分布中生成一万个独立实现,并计算小于0.5的数字;例如,我得到6905少于10000个样本中的0.5个;我对P(Z <0.5)的估计为0.6905,与实际值相差不大,这就是蒙特卡洛估计。
我从程序中得到的数字列表将像生成正常随机变量的大量抽奖一样分布。这将为我提供标准正态随机变量的马尔可夫链蒙特卡罗模拟。如果我用它来估计概率,那将是MCMC的估计。”
想象一下,您想找到一种更好的策略,在棋盘游戏《大富翁》中击败您的朋友。将游戏中最重要的内容简化为以下问题:人们最常使用哪些属性?答案取决于棋盘的结构,游戏规则和两个骰子的投掷次数。
回答问题的一种方法是这样。扔骰子并遵循规则时,只需在棋盘上跟随一块棋子即可。计算您在每个物业上登陆的次数(或编程计算机为您完成工作)。最终,如果您有足够的耐心或在计算机中对规则进行了足够好的编程,则可以很好地了解哪些属性可以带来最多的业务。这应该可以帮助您更频繁地获胜。
您要做的是马尔可夫链蒙特卡洛(MCMC)分析。董事会定义规则。您下一个到达的位置仅取决于您现在的位置,而不是您以前去过的地方,并且特定概率由两个骰子的掷骰分布决定。MCMC将这种想法应用于数学或物理系统,例如明天的天气或气体分子随机散布的花粉粒将最终出现的地方。
好的,这是我对非正式和粗略解释的最佳尝试。
马尔可夫链是一个随机过程,其特征是未来仅取决于过程的当前状态,而不取决于过去,即它是无记忆的。股票交易是随机过程的一个例子。马尔可夫链的一个例子是像“大富翁”或“蛇和梯子”这样的棋盘游戏,您的未来位置(掷骰子之后)将仅取决于掷骰前的开始位置,而不取决于您以前的任何位置。马尔可夫链的教科书示例是“酒鬼漫步”。想象一下一个喝醉了的人只能向左或向右移动一个步伐。醉汉以相等的概率向左或向右移动。这是一个马尔可夫链,醉汉的未来/下一个职位仅取决于他目前的位置。
蒙特卡洛方法是一种计算算法(简单地是指令集),可以从正在研究的某个过程中随机采样。它们是估计难以确定或难以找到的东西的一种方法。它们基本上是某种数学或物理过程的计算机模拟形式。蒙特卡洛的绰号来自娱乐场和随机数生成之间的类比。回到前面的棋盘游戏示例,也许我们想知道是否对Monopoly棋盘上的某些属性的访问比对其他属性的访问更为频繁。蒙特卡洛实验将涉及重复掷骰子并计算您落在每个属性上的次数。它也可以用于计算数值积分。(非常非正式地,我们可以将积分视为某些函数图下的面积。)蒙特卡洛积分在高维函数上的工作原理非常好,方法是对函数点进行随机采样并在这些不同点上计算某种类型的平均值。通过增加样本数量,大数定律告诉我们可以通过覆盖越来越多的函数来提高近似精度。
可以将这两个概念组合起来,以解决贝叶斯推断,计算生物学等领域中的一些难题,这些领域需要计算多维积分来解决常见问题。想法是构造一个马尔可夫链,该马尔可夫链在多个步骤后收敛到所需的概率分布。然后将经过大量步骤后的链状状态用作所需分布的样本,并重复该过程。有许多不同的MCMC算法,它们使用不同的技术来生成马尔可夫链。常见的包括Metropolis-Hastings和Gibbs Sampler。
贝叶斯黑客方法节选
下面的可视化演示了这一点。颜色越深红色,未知物在该位置的可能性就越高。相反,具有深蓝色的区域表示我们的先验对存在的未知数的概率非常低。
这些是2D空间中的简单示例,我们的大脑可以很好地理解表面。实际上,我们的先验产生的空间和表面的尺寸可能更高。
推高原本的地面造高大的山峰。上推的量受到先验概率的抵制,因此先验概率越小意味着阻力越大。因此,在上述双指数先验情况下,可能在(0,0)角附近喷发的一座山(或多座山)将比在(5,5)附近喷发的山高得多,因为附近的阻力更大(5,5)。山脉,或更广泛的说,山脉反映了可能找到真实参数的后验概率。
黑点代表真实参数。正如上面模拟的那样,即使只有1个采样点,山脉也会尝试包含真实参数。当然,使用1个样本大小进行推断是非常幼稚的,选择如此小的样本大小仅是说明性的。
从后分布,而不是分布本身。将山区的类比延伸到极限,MCMC执行的任务类似于反复询问“我发现这个卵石有多大可能来自我正在寻找的山峰?”,并通过返回数千个被接受的卵石来完成其任务,希望重建原始的山。在MCMC和PyMC术语中,返回的“卵石”序列是样本,通常称为跟踪。
当我说MCMC进行智能搜索时,我的意思是MCMC 有望会聚到后验概率高的区域。MCMC通过探索附近的位置并以较高的概率进入区域来做到这一点。同样,也许“收敛”不是描述MCMC进程的准确术语。会聚通常意味着朝着空间中的某个点移动,但是MCMC朝着空间中的一个更大区域移动,并在该区域中随机行走,从该区域中采集样本。
首先,将数千个样本返回给用户可能听起来像是描述后验分布的一种无效方法。我认为这是非常有效的。考虑其他可能性:
除了计算原因外,返回样本的最主要的原因可能是我们可以轻松地使用“大数定律”来解决否则很难解决的问题。我将此讨论推迟到下一章。
有大量执行MCMC的算法。最简单的说,大多数算法可以如下概括地表示:
1. Start at current position.
2. Propose moving to a new position (investigate a pebble near you ).
3. Accept the position based on the position's adherence to the data
and prior distributions (ask if the pebble likely came from the mountain).
4. If you accept: Move to the new position. Return to Step 1.
5. After a large number of iterations, return the positions.
这样,我们就朝着存在后验分布的区域大体上移动,并在旅途中少量地收集样本。一旦达到后验分布,我们就可以轻松收集样本,因为它们很可能都属于后验分布。
如果MCMC算法的当前位置处于极低概率的区域中(通常是算法开始时的情况(通常在空间中的随机位置),则算法将在可能不位于后部的位置移动)但比附近的其他地方都要好。因此,算法的第一步不反映后验。
因此,这里有大量的答案可以从统计/概率教科书,维基百科等中得到解释。我认为他们在市场部。如果我不得不向他们解释任何技术性的问题,则可以应用“显示不告诉”规则。考虑到该规则,我可能会向他们展示这样的内容。
这里的想法是尝试编码一种我可以教自己拼写的算法,而不是通过学习所有数百(数千个)规则来完成,例如在以无声e结尾的单词中添加结尾时,请删除最后一个e如果结尾以元音开头。无效的原因之一是我不知道这些规则(我什至不确定我刚才引用的规则是否正确)。相反,我将通过显示一堆正确拼写的单词并让其从这些单词中提取规则来教它进行拼写,这或多或少是机器学习的本质,而与算法无关-模式提取和模式识别。
成功标准是正确拼写该算法从未见过的单词(我意识到这完全是偶然的,但是营销人员不会发生,所以我会忽略-再加上我将拥有该算法尝试拼写一个单词而不是一个单词,所以可能不太会被一些幸运的猜测所欺骗。
大约一个小时前,我从优秀的古腾堡计划网站(赫尔曼·黑塞小说《悉达多》)下载(作为纯文本文件)。我将用这本小说中的单词来教算法如何拼写。
因此,我在下面编码了一次扫描这本小说的算法,一次扫描三个字母(每个单词的末尾都有一个附加字符,即“空白”或单词的末尾)。三个字母的序列可以告诉您很多信息,例如,字母“ q”几乎总是跟着“ u”;“ ty”序列通常出现在单词的结尾;z很少这样做,依此类推。(注意:我可以很容易地给它输入整个单词,以便训练它说完整的句子-完全一样的想法,只是对代码进行了一些调整。)
不过,这些都不涉及MCMC,它是在训练后发生的,当我们给算法几个随机字母(作为种子)并开始形成“单词”时。该算法如何构建单词?想象一下,它的块为“ qua”;接下来会添加什么字母?在训练过程中,该算法从小说中的所有数千个单词中构建了一个庞大的字母序列频率矩阵。该矩阵中的某个位置是三个字母的块qua和可能遵循该序列的字符的频率。该算法根据可能跟随字母的频率选择字母。因此,算法下一步选择的字母取决于(并且仅取决于)其字构建队列中的最后三个字母。
这就是马尔可夫链蒙特卡罗算法。
我认为,最好的方式来说明其工作原理是基于不同程度的培训来显示结果。通过更改算法使算法新颖的通过次数来改变训练水平-通过的次数越多,其字母序列频率矩阵的保真度就越高。下面是经过新颖的“悉达多”训练后的结果-该算法以100个字符的字符串形式输出了结果。
一遍小说《悉达多》:
然后,whoicks ger会全神贯注于他的立场,否则你会迷恋于artim糊涂的污秽中。
(直接说,它学会了几乎完美的威尔士语;我没想到这一点。)
经过两遍小说之后:
ack wor prenskinith show was a twor seened th nothead theatin land rhatingle is theov
10次通过后:
尽管但现在应该祈祷喝水她的狗杠杆疼痛的脚每个都不是记忆力较弱。
这是代码(在Python中,我几乎可以确定这可以使用MCMC软件包在R中完成,其中只有3-4行有几行)
def create_words_string(raw_string) :
""" in case I wanted to use training data in sentence/paragraph form;
this function will parse a raw text string into a nice list of words;
filtering: keep only words having more than 3 letters and remove
punctuation, etc.
"""
pattern = r'\b[A-Za-z]{3,}\b'
pat_obj = re.compile(pattern)
words = [ word.lower() for word in pat_obj.findall(raw_string) ]
pattern = r'\b[vixlm]+\b'
pat_obj = re.compile(pattern)
return " ".join([ word for word in words if not pat_obj.search(word) ])
def create_markov_dict(words_string):
# initialize variables
wb1, wb2, wb3 = " ", " ", " "
l1, l2, l3 = wb1, wb2, wb3
dx = {}
for ch in words_string :
dx.setdefault( (l1, l2, l3), [] ).append(ch)
l1, l2, l3 = l2, l3, ch
return dx
def generate_newtext(markov_dict) :
simulated_text = ""
l1, l2, l3 = " ", " ", " "
for c in range(100) :
next_letter = sample( markov_dict[(l1, l2, l3)], 1)[0]
simulated_text += next_letter
l1, l2, l3 = l2, l3, next_letter
return simulated_text
if __name__=="__main__" :
# n = number of passes through the training text
n = 1
q1 = create_words_string(n * raw_str)
q2 = create_markov_dict(q1)
q3 = generate_newtext(q2)
print(q3)
MCMC通常用作原始蒙特卡洛模拟技术的替代方法。MCMC和其他蒙特卡洛技术都用于评估困难积分,但MCMC可以更广泛地使用。
例如,统计中的一个常见问题是计算与某些概率/随机模型有关的平均结果。MCMC和蒙特卡洛技术都可以通过生成一系列模拟结果来解决此问题,我们可以使用这些结果来估计真实均值。
MCMC和原始蒙特卡洛技术都可以工作,因为与给定结果相等的模拟的长期比例将等于该结果的模型化概率。因此,通过生成足够的模拟,两种方法所产生的结果将是准确的。
*我说的是平等的,尽管总的来说我应该谈论可测量的集合。但是,外行对此可能不感兴趣*
但是,虽然原始的蒙特卡洛(Monte Carlo)涉及产生许多独立的模拟,每个模拟都根据建模的分布进行分配,但MCMC涉及生成随机游动,该游动在长期内以所需的频率“访问”每个结果。
因此,MCMC的诀窍是选择一个随机游动,它将以所需的长期频率“访问”每个结果。
一个简单的示例可能是从一个模型进行模拟,该模型表示结果“ A”的概率为0.5,结果“ B”的概率为0.5。在这种情况下,如果我在位置“ A”开始随机游走并规定在每个步骤中以0.2(或其他任何大于0的概率)切换到另一个位置,则可以确定随机游走大约50%的步数会访问“ A”和“ B”中的每一个步数,这与我们的模型所规定的概率一致。
这显然是一个非常无聊的例子。但是,事实证明,MCMC通常适用于难以应用标准蒙特卡洛或其他技术的情况。
您可以在此处找到涵盖其基本内容以及其工作原理的文章:
我是一名DNA分析师,使用完全连续的概率基因分型软件来解释DNA证据,我必须向陪审团解释其工作原理。诚然,我们过分简化,我意识到其中一些过分简化以提高整体理解为名牺牲了特定细节的准确性。但是,在陪审团了解如何在没有学术学位和多年专业经验的情况下将这一过程用于DNA解释的背景下,他们得到了要点:)
背景:该软件使用大都市黑斯廷斯(Hastings)MCMC和模仿DNA分布图已知行为的生物学模型(该模型是基于实验室分析已知条件下许多DNA分布图(代表未知案例中遇到的范围)而生成的验证数据而建立的。有8个独立的链,我们评估收敛性以确定是否重新运行以增加预存和后期接受(默认Burnin 100k接受和post 400k接受)
当起诉/辩护询问有关MCMC的信息时:我们解释说它代表马尔可夫链蒙特卡洛(Monte Carlo),代表用于复杂问题解决的特殊算法类别,该算法只是一个花哨的词,指的是一系列过程或例程由计算机执行... mcmc算法的工作原理是提出一个解决方案,对该解决方案进行仿真,然后评估该仿真对所观察到的实际证据数据的镜像程度。不能很好地拟合观察结果的模拟...在许多重复的拟议解决方案的抽样/猜测中,马尔可夫链从低概率解决方案向高概率解决方案发展,从而更好地拟合/解释了所观察到的证据特征,直到最终达到平衡实现,意味着该算法对新提案进行抽样的能力有限,从而大大提高了概率
当被问及大都市黑斯廷斯:我们解释说这是MCMC算法的改进,描述了其接受或拒绝提案的决策过程...通常以“热/冷”儿童游戏的类比来解释,但我可能考虑过使用“陪审团特别年轻时,请向右或向左滑动!!!:p但是,使用我们的冷/热比喻,我们总是接受热猜测,偶尔会接受一小部分时间的冷猜测,并解释了有时接受冷猜测的目的是为了确保链条采样的可能性更大。反对在实际平衡之前陷入一个特定的建议
进行编辑以添加/阐明:通过热/冷的类比,我们解释说,在儿童游戏中,领导者选择房间内的目标对象/区域,而玩家轮流猜测相对于其当前站立/位置的移动方向。领队告诉他们如果是很热的话就改变他们的位置/移动,如果是很冷的话他们就失去转弯/保持位置。同样,在我们的软件中,移动/接受的决定仅取决于提案的可能性,而不是当前保持位置的可能性...但是,目标是由儿童游戏中的领导者预先定义/知道的,而我们软件中的目标不是预先定义的-完全未知(这也是为什么它
就像我说的那样,为了提高理解力,超级基础知识和绝对缺乏技术细节-我们努力在中等教育水平上进行解释。随时提出建议。我将合并它们。
该视频(从5:50开始)非常直观。
假设您要对该图片中绿色(多维)分支上的点进行采样。如果在整个黑色超空间上投掷点并检查其值,那么您正在浪费大量的采样(搜索)能量。因此,控制您的采样策略(可以自动执行)以选择更靠近绿色分支的点(这很重要)会更有意义。一次偶然地(或控制地)被击中即可发现绿枝,其余的采样工作(红点)将在随后产生。红色吸引到绿线的原因是因为马尔可夫链转换矩阵可以用作您的采样引擎。
因此,用外行的话来说,MCMC是一种节能(低成本)的采样方法,特别是在巨大的“黑暗”(多维)空间中工作时。