MCMC(一)蒙特卡洛方法

MCMC概述

从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。要弄懂MCMC的原理我们首先得搞清楚蒙特卡罗方法和马尔科夫链的原理。Gibbs采样是蒙特卡洛方法求解过程的一个重要的通用采样方法。

MCMC为谁而生?

蒙特卡罗原来是一个赌场的名称,用它作为名字大概是因为蒙特卡罗方法和赌术活动本质上都是一种随机模拟或者说是概率统计的方法。虽然取了这个名字,但是MCMC并不是用于赌博,最早的蒙特卡罗方法都是为了求解一些不太好求解的求和或者积分问题。举个例子,假如现在要求以下积分问题:
θ = a b f ( x ) d x \theta=\int_a^b f(x)dx
如果我们很难求解出f(x)的原函数,那么这个积分比较难求解。这时候我们可以通过蒙特卡罗方法来模拟求解近似值。如何模拟呢?假设我们函数图像如下图:
在这里插入图片描述
则一个简单的近似求解方法是在[a,b]之间随机的采样一个点。比如 x 0 x_0 ,然后用 f ( x 0 f(x_0 )代表在[a,b]区间上所有的f(x)的值。那么上面的定积分的近似求解为:
( b a ) f ( x 0 ) (b-a)f(x_0)
当然,用一个值代表[a,b]区间上所有的f(x)的值,这个假设太粗糙。那么我们可以采样[a,b]区间的n个值: ( x 0 , x 1 , . . . x n 1 ) (x_0,x_1,...x_{n-1}) 用它们的均值来代表[a,b]区间上所有的f(x)的值。这样我们上面的定积分的近似求解为:
b a n i = 0 n 1 f ( x i ) \frac{b-a}{n}\sum\limits_{i=0}^{n-1}f(x_i)
虽然上面的方法可以一定程度上求解出近似的解,但是它隐含了一个假定,即x在[a,b]之间是均匀分布的,而绝大部分情况,x在[a,b]之间不是均匀分布的。如果我们用上面的方法,则模拟求出的结果很可能和真实值相差甚远。 
怎么解决这个问题呢? 如果我们可以得到x在[a,b]的概率分布函数p(x),那么我们的定积分求和可以这样进行:
θ = a b f ( x ) d x = a b f ( x ) p ( x ) p ( x ) d x 1 n i = 0 n 1 f ( x i ) p ( x i ) \theta = \int_a^b f(x)dx = \int_a^b \frac{f(x)}{p(x)}p(x)dx \approx \frac{1}{n}\sum\limits_{i=0}^{n-1}\frac{f(x_i)}{p(x_i)}
在上式中,由于 a b f ( x ) p ( x ) p ( x ) d x \int_a^b \frac{f(x)}{p(x)}p(x)dx 可以看做是 f ( x ) p ( x ) \frac{f(x)}{p(x)} 基于概率分布p(x)的期望,那么我们可以用期望的方法来求这个式子的值。而计算期望的一个近似方法是取 f ( x ) p ( x ) \frac{f(x)}{p(x)} 的若干个基于分布p(x)的采样点,然后求平均值得到。
上式最右边的这个形式就是蒙特卡罗方法的一般形式。当然这里是连续函数形式的蒙特卡罗方法,但是在离散时一样成立。

可以看出,最上面我们假设x在[a,b]之间是均匀分布的时候, p ( x i ) = 1 / ( b a ) p(x_i)=1/(b−a) ,带入我们有概率分布的蒙特卡罗积分的上式,可以得到:
1 n i = 0 n 1 f ( x i ) 1 / ( b a ) = b a n i = 0 n 1 f ( x i ) \frac{1}{n}\sum\limits_{i=0}^{n-1}\frac{f(x_i)}{1/(b-a)} = \frac{b-a}{n}\sum\limits_{i=0}^{n-1}f(x_i)
也就是说,我们最上面的均匀分布也可以作为一般概率分布函数p(x)在均匀分布时候的特例,那么,到现在为止,根据MCMC表达式 1 n i = 0 n 1 f ( x i ) p ( x i ) \frac{1}{n}\sum\limits_{i=0}^{n-1}\frac{f(x_i)}{p(x_i)} ,现在的问题变成了如何基于分布P(x)采样出若干个样本?

概率分布采样

在统计模拟中,有一个很重要的问题就是给定一个概率分布P(x),如何去采样基于这个概率分布的n个x的样本集。对于常见的均匀分布uniform(0,1)是非常容易采样样本的,一般通过线性同余发生器可以很方便的生成(0,1)之间的伪随机数样本。而其他常见的概率分布,无论是离散的分布还是连续的分布,它们的样本都可以通过uniform(0,1)的样本转换而得。
但是总有一些分布,尤其是很复杂的分布,我们是没法通过这种转换得到相对分布的样本集的,譬如,有如下的情况:
p ( x ) = p ~ ( x ) p ~ ( x ) d x p(x)=\frac{\widetilde{p}(x)}{\int\widetilde{p}(x)dx}
p ~ ( x ) \widetilde{p}(x) 我们是可以计算的,但是底下的积分却无法显示的计算,也就无法方便的生成样本,此时我们就需要更加复杂的随机模拟的方法来生成样本,而Gibbs采样就可以解决这个难题,Gibbs采样将在下一节详细阐述。

发布了31 篇原创文章 · 获赞 5 · 访问量 2509

猜你喜欢

转载自blog.csdn.net/qq_40176087/article/details/105004232