本文是From Scratch: Bayesian Inference, Markov Chain Monte Carlo and Metropolis Hastings, in python的阅读笔记
马尔科夫链蒙特卡洛(MCMC, Markov Chain Monte Carlo)的定义是:通过在概率分布中进行采样,估计给定观测数据下模型的参数。(MCMC is a class of techniques for sampling from a probability distribution and can be used to estimate the distribution of parameters given a set of observations.)
MCMC是用来估计模型(概率分布)的参数的,由于不方面直接计算模型参数,所以通过“设想”一组可能的参数值(依从某种概率分布进行采样)近似参数分布,即蒙特卡洛部分。“设想”(采样)是有指导原则的,根据当前采样的参数值以及参数的先验,去采样下一个参数值,具有马尔科夫链的性质。
蒙特卡洛通过不断地生成随机数来估计难以直接计算的量,如模型参数,积分等等。如要计算以下圆形的面积,知道圆形在正方形内,产生一些随机点,计算落在圆形区域内点的占比,乘以正方形的面积就可近似圆形的面积。
以上采样到底是怎么实现的呢?常用方法之一是M-H采样(Metropolis-Hastings)。
M-H采样
因为我们估计的是参数的分布,用一组可能的取值表示,这个分布就是模型参数A在给定数据集D下的后验分布P(A=a|D). 这组参数值的采样过程是:根据当前参数值a和参数先验P(a)去估计下一个参数值a1,对当前参数的依赖性由一个转移模型(transition model)Q(a1|a)来决定,也称为proposal distribution。若采样得到的新样本a1比当前样本a的可能性高,则接受该新样本,太低的话就拒绝,这个评估依据就是P(a1|D)/P(a|D),根据贝叶斯准则:
新样本a1接受的概率为:
也就是说,a1的可能性比a高,那一定接受,如果不是,a1并不会完全被拒绝,还是有一定的概率可以接受,首先在[0,1]的均匀分布上产生一个随机数r,如果P(接受)>r,则接受,否则拒绝,类似模拟退火。
M-H过程如下:
参考阅读: