Gibbs采样
蒙特卡洛采样
所谓蒙特卡洛采样就是用统计的方法采样,不同采样方法的区别在于规定如何掷色子。随机采样准确性是不够的!除非采样的量最够大,怎样采样不多却很好的拟合分布是采样的核心问题!一般来说越复杂的分布需要的采样方法也越复杂!
1、采样是一种随机算法(近似算法)
从分布得到样本集
从样本集得到分布
2、独立采样
直接采样法:simple,一般只能解决一维分布问题
接受-拒绝抽样:1 海选大量样本 2 初选有效样本 思想:分布f(x)很难采样,先通过分布g(x)采样,用某种机制去除一些样本,剩下的是f(x)的样本
重要性采样
3、马尔科夫-蒙特卡洛抽样(MCMC)
Metropolis-Hasting算法
Gibbs采样算法
重要性采样
一句话概括:概率分布在密度大的地方应该多采样,但是概率密度又太复杂,只能用一个简单的曲线模拟他,并根据简单曲线采样。
概率分布F(x) = 蒙特卡洛积分
f(x)不解析,所以分布无法得到,需要分成小的矩形来计算。此时均匀采样不准,因为在计算面积的时候高的地方需要精确,需要多采样,低的地方少采样。
我们采用一个重要性函数g(x), 他能大致描述f(x)的高低分布,但简单很多。根据g(x)的概率分布,从中抽取N个样本,则上式近似为

从而通过抽样就得到f(x)的分布。
抽样的步骤如下:
1 选择容易抽样的分布g(x),从中抽样N个样本
2 计算公式,得到近似解
马尔科夫-蒙特卡洛抽样
独立采样: 独立采样效率低,所抽取的样本中有很大部分是无效的
关联采样: 下一个样本与这个样本有关系
MCMC: 通过构建一个markov chain使得该markov chain的稳定分布是我们所要采样的分布f(x)
我们想从联合分布中抽样k个样本,在n维空间中。
概率分布:p(x1, ... , xn) 样本集 X=(x1, ... , xn) 第i个维度X(i)=(x1(i),...,xn(i))
从初始维度开始:X(0)
样本维度的条件概率:知道样本集的一个维度在样本集其他维度下的条件概率(边缘分布),我们可以得到。
Gibbs 采样
Gibbs sampling可以得到概率分布,而且效率很高。Gibbs算法,很简单,就是用条件分布的抽样来替代全概率分布的抽样。
例如,X={x1,x2,...xn}满足分布p(X),如何对p(X)进行抽样呢?
如果我们知道它的条件分布p(x1|其他特征),...,p(xi|其他特征),....。如果这些条件分布都是很容易抽样的,那么我们就可以通过对条件分布的抽样来对全概率分布p(X)进行抽样。
Gibbs采样算法的步骤:
1. 给定一个初始样本

2. 抽样一个样本i+1
已知一个样本Xi={x1i,x2i,...,xni},
2.1 获取每个维度:


5.步骤2可以得到X的一个样本,然后重复步骤2可以不断地得到X的样本。
Gibbs采样是为了采样出(v,h)的联合概率密度分布,跟用EM估计模型参数是不一样的。
举例分析
Gibbs采样实际上是一个马尔科夫链-蒙特卡洛算法。联合概率分布未知,无法直接采样,但是通过吉布斯采样我们得到近似的一系列观察值。这些观察值用来近似真实分布(即产生分布的直方图),或用来近似部分变量的边缘分布(如一些参数和隐变量),或用来计算积分(如计算一个变量的期望)。典型的场景, 一些变量的观测值已知,不用采样。
比如一个sample有三个特征(事件,时间,天气)
事件E∈{吃饭、学习、打球} 时间T∈{上午、下午、晚上} 天气W∈{晴朗、刮风、下雨}
首先随便初始化一个样本. sample1=(E=学习 T=晚上 W=刮风),然后依条件概率改变其中的一个变量。具体说,假设我们知道晚上+刮风,我们给E生成一个变量,比如,学习-》吃饭。我们再依条件概率改下一个变量,根据学习+刮风,把晚上变成上午。类似地,把刮风变成刮风(当然可以变成相同的变量)。这样学习+晚上+刮风-》吃饭+上午+刮风。
同样的方法,得到一个序列,每个单元包含三个变量,也就是一个马尔可夫链。然后跳过初始的一定数量的单元(比如100个),然后隔一定的数量取一个单元(比如隔20个取1个)。这样sample到的单元,是逼近联合分布的。
在Metropolis-Hastings里面提到,遇到多元分布的时候,选取初始值非常困难,在每一个维度上都必须恰到好处。而Gibbs Sampling则是专门解决此类问题的算法,它对每一维进行同时的单独算法迭代。
Gibbs Sampling是统计推断,特别是贝叶斯推断的一个工具。它是一个随机化算法(randomized algorithm,利用随机数进行运算的算法),也是确定性算法(deterministic algorithm,如EM算法)的一个替代。
和其他MCMC算法一样,Gibbs sampling生成了一系列的Markov Chain样本,而这些样本互相与邻近样本相关。因此,取样的时候要特别注意样本的独立性(尤其是通过每个样本取一个的方法来取样的时候)。另外,在Markov Chain开始的时候还要经历一段“burn-in”期,才能得到目标分布。
1.1 Gibbs Sampling 基本概念
最简单的Gibbs sampling是Metropolis-Hastings算法的一个特殊情况,而Gibbs sampling的拓展则可看作是一个通用的取样体系。这个体系通过轮流对每一个(或每组)变量进行取样并结合Metropolis-Hastings算法(或者更复杂的算法,如slice sampling,adaptive rejection sampling和adaptive rejection Metropolis算法)来对大量变量进行一步或多步取样。
当联合分布未知或者难以取样,而每一个变量的条件分布则已知或者更易于取样的时候,我们就可以用Gibbs Sampling。Gibbs Sampling算法依次从每一个变量的分布中,以其他变量的当前值为条件,生成一个个体。易知,这个样本序列构成了一个Markov Chain,以及这个Markov Chain的平稳分布(stationary distribution)就是所需要的联合分布。(Gelman et al, 1995)。
Gibbs Sampling尤其适用于取样贝叶斯网络(Bayesian network)的后验分布(posterior distribution),因为贝叶斯网络是由一个条件分布集所指定的。
1.2 算法实现
Gibbs Sampling本身是Metropolis-Hastings算法的特例。Gibbs Sampling的特点是,给定一个多元分布,相比对联合分布积分然后求边缘分布,从条件分布中取样的方法来的更加容易。假设我们想要从联合分布中得到
的k个样本。设第i个样本为
:
- 初始值
。
- 计算
。依次对每一个变量进行取样。为了取样
,我们通过条件分布
对它进行更新。注意,从j+1个变量开始,取得是第i个样本的值,并非第i+1个。
- 重复第二步k次。
条件分布和联合分布的关系:
即条件分布与联合分布正相关。因为分布并非的函数,因此不受
的影响。
以上算法具备三个特征:
- 样本能近似所有变量的联合分布
- 任何变量的子集的边缘分布都能通过只考虑该变量的子集的样本来近似,忽略其他变量
- 将所有样本取平均就能近似得到任意变量的期望
算法要点:
- 变量初始值可以通过EM算法等算法来随机取得,且并不需要明确的初始值。
- burn-in,忽略掉前期的一些样本;只考虑每n个样本来计算期望。
- 使用模拟退火算法(simulated annealing)来减少random walk。
参考资料
http://www.cnblogs.com/ironstark/p/5229085.html
http://www.cnblogs.com/daniel-D/p/3388724.html



浙公网安备 33010602011771号