如果有人告诉你他最近在玩“MCMC”,那他一般是指“马尔科夫链”+“蒙特卡洛模拟”。如果他告诉你最近在玩“MC”,那大概率是“我的世界”(Minecraft)。
MCMC是在做一件什么事情呢?
统计学在如今已经有了诸多妙用,很多情况下,都需要求解下面一个积分(以一维为例)
其中f(x)是某个分布的概率密度函数,我们耳熟能详的有比如均匀分布、高斯分布、瑞利分布。更多时候,f(x)是个很复杂的函数形式。而这个积分式就是在计算函数h(x)在分布f(x)下的平均值。
注意,我们是在处理实际问题,而在实际问题中,h(x)和f(x)的具体形式可能很复杂,根本无法求出原函数然后做定积分,但概率论提供了一个粗暴但极其有效的方法,假如获得了取自分布f(x)的一系列样本值X1,X2,X3,...,那么就可以如下计算上述积分
也就是直接求h(x)的样本平均值,这个值就近似等于积分值。
简单来说,就是产生符合分布f(x)的大量随机数,然后就可以计算出h(x)的平均值(即上述积分),这就是蒙特卡洛模拟干的事情。
仔细想想就会发现,上述过程最难的事情在于产生符合f(x)的样本值,即如何从已知概率密度函数f(x)中抽取随机数,而这就是马尔科夫链做的事情。
从分布中抽取随机数的方法有不止一种,比如还有“接受拒绝抽样”、“重要抽样”,马尔科夫链抽样的优点在于对于任意形式的概率密度函数都适用,而且产生随机数的效率高(接受拒绝法产生的一部分结果不符合要求需要扔掉,所以效率很低)。
比如,用马尔可夫链从二维正态分布(均值分别为0,5,方差均为1,协方差为0.7)中抽样10万个点,样本的分布如下
左图是采样点在两个维度上的分布,右图是第一个维度的边缘分布
可以看到抽样的效果非常好,而这么多样本(10万个)电脑用马尔可夫链方法在眨眼间就给出来了。
怎么样,假期你是要玩“MCMC”呢?还是“MC”呢?(金秋时节的假期还是远离电脑,出去走动一下)
假期愉快!
本文完。