MCMC(马尔科夫链蒙特卡罗)
应用场景:
用于从复杂分布中获取随机样本的统计学算法。
算法思想:
MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。要弄懂MCMC的原理我们首先得搞清楚蒙特卡罗方法和马尔科夫链的原理。
1.蒙特卡罗方法(Monte Carlo Simulation,简称MC)
最早的蒙特卡罗方法都是为了求解一些不太好求解的求和或者积分问题。比如积分:
θ = ∫ a b f ( x ) d x \theta=\int_{a}^{b} f(x) d x θ=∫abf(x)dx
当其原函数很难时,可以通过蒙特卡罗方法来模拟求解近似值:
采样[a,b]区间的n个值:x0,x1,…xn−1x0,x1,…xn−1,用它们的均值来代表[a,b]区间上所有的f(x)f(x)的值。这样我们上面的定积分的近似求解为
b − a n ∑ i = 0 n − 1 f ( x i ) \frac{b-a}{n} \sum_{i=0}^{n-1} f\left(x_{i}\right) nb−a∑i=0n−1f(xi)
当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) d x=\int_{a}^{b} \frac{f(x)}{p(x)} p(x) d x \approx \frac{1}{n} \sum_{i=0}^{n-1} \frac{f\left(x_{i}\right)}{p\left(x_{i}\right)} θ=∫abf(x)dx=∫abp(x)f(x)p(x)dx≈n1∑i=0n−1p(xi)f(xi)
上式最右边的这个形式就是蒙特卡罗方法的一般形式。
以上步骤的重点归纳:
1.得到x的概率分布
2.根据常见的概率分布就可以得到x的样本集
线性同余发生器(Linear congruential generator),简称LCG,是一种能产生具有不连续计算的伪随机序列的分段线性方程的算法,它代表了最古老和最知名的伪随机序列生成器算法之一,其理论相对容易理解,并且易于实现和快速,特别是在可以通过存储位截断提供模运算的计算机硬件上。 --百度百科
问题:
很多时候,我们的x的概率分布不是常见的分布,这意味着我们没法方便的得到这些非常见的概率分布的样本集。
引入:接受-拒绝采样
设定一个程序可采样的分布 q(x) 比如高斯分布,然后按照一定的方法拒绝某些样本,以达到接近 p(x) 分布的目的,其中q(x)叫做 proposal distribution。
具体采用过程如下,设定一个方便采样的常用概率分布函数q(x),以及一个常量 k,使得p(x) 总在 kq(x)的下方。如上图。
首先,采样得到q(x)的一个样本z0,然后,从均匀分布(0,kq(z0))中采样得到一个值u。如果u落在了上图中的灰色区域,则拒绝这次抽样,否则接受这个样z0。重复以上过程得到n个接受的样本z0,z1,…zn−1z0,z1,…zn−1,则最后的蒙特卡罗方法求解结果为:
1 n ∑ i = 0 n − 1 f ( z i ) p ( z i ) \frac{1}{n} \sum_{i=0}^{n-1} \frac{f\left(z_{i}\right)}{p\left(z_{i}\right)} n1∑i=0n−1p(zi)f(zi)
缺陷:
1)对于一些二维分布p(x,y)p(x,y),有时候我们只能得到条件分布p(x|y)和p(y|x)和,却很难得到二维分布p(x,y)一般形式,这时我们无法用接受-拒绝采样得到其样本集。
2)对于一些高维的复杂非常见分布p(x1,x2,…,xn)p(x1,x2,…,xn),我们要找到一个合适的q(x)和k非常困难。
2.马尔科夫链
【另一种思路:】
假定我们可以得到我们需要采样样本的平稳分布所对应的马尔科夫链状态转移矩阵,那么我们就可以用马尔科夫链采样得到我们需要的样本集,进而进行蒙特卡罗模拟。
采样过程:
P中每一项都是一个条件概率。
难点:随意给定一个简单概率分布π0,如何得到它所对应的马尔科夫链状态转移矩阵P,进而得到采样及最终的平稳分布π?
3. MCMC(马尔科夫链蒙特卡罗)
我们的目标矩阵P可以通过任意一个马尔科夫链状态转移矩阵Q乘以α(i,j)得到。α(i,j)我们有一般称之为接受率。取值在[0,1]之间,可以理解为一个概率值。即目标矩阵P可以通过任意一个马尔科夫链状态转移矩阵Q以一定的接受率获得。
采样过程:
综上:
1)首先找到任意一个简单概率分布π0,由于马尔可夫具有【马尔科夫链模型的状态转移矩阵收敛到的稳定概率分布与我们的初始状态概率分布无关】的性质,可以通过 一个任意选定的马尔可夫转移状态概率矩阵Q 收敛到我们的目标平稳分布π,目标矩阵可以通过任意一个马尔科夫链状态转移矩阵Q以一定的接受率α获得。但Q需要满足以上条件c)。
2)从任意简单概率分布得出初始状态x0;
3)每转移一次就会有一个t时刻的状态值;
再回到3)a);
回顾总结:(试着问问自己)
1)MCMC是为了解决什么问题?
- 答:为了解决负复杂分布Π(x)难以获取随机样本的问题。(一般简单概率分布获取样本都可以通过同余发生器)
2)MCMC是怎么解决的?
- 答:主干是通过
拒绝-接受采样来实现。通过输入一个简单概率分布Π0和一个随意选定的概率矩阵Q,进行马尔可夫转换,每转移一次就要基于转移矩阵的概率分布采样一次,通过接受-拒绝采样方法判断样本是否被接受。
参考:[https://www.cnblogs.com/pinard/p/6625739.html]: