gibbssampling例子.docx
- 文档编号:6637661
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:8
- 大小:24.77KB
gibbssampling例子.docx
《gibbssampling例子.docx》由会员分享,可在线阅读,更多相关《gibbssampling例子.docx(8页珍藏版)》请在冰豆网上搜索。
gibbssampling例子
gibbssampling例子
【篇一:
gibbssampling例子】
本文是对参考资料中多篇关于sampling的内容进行总结+搬运,方便以后自己翻阅。
其实参考资料中的资料写的比我好,大家可以看一下!
好东西多分享!
prml的第11章也是sampling,有时间后面写到prml的笔记中去:
)
随机模拟也可以叫做蒙特卡罗模拟(montecarlosimulation)。
这个方法的发展始于20世纪40年代,和原子弹制造的曼哈顿计划密切相关,当时的几个大牛,包括乌拉姆、冯.诺依曼、费米、费曼、nicholasmetropolis,在美国洛斯阿拉莫斯国家实验室研究裂变物质的中子连锁反应的时候,开始使用统计模拟的方法,并在最早的计算机上进行编程实现。
[3]
随机模拟中有一个重要的问题就是给定一个概率分布p(x),我们如何在计算机中生成它的样本。
一般而言均匀分布uniform(0,1)的样本是相对容易生成的。
通过线性同余发生器可以生成伪随机数,我们用确定性算法生成[0,1]之间的伪随机数序列后,这些序列的各种统计指标和均匀分布uniform(0,1)的理论计算结果非常接近。
这样的伪随机序列就有比较好的统计性质,可以被当成真实的随机数使用。
下面总结这么几点:
1、蒙特卡洛数值积分
2、均匀分布,box-muller变换
3、montecarloprinciple
4、接受-拒绝抽样(acceptance-rejectionsampling)
5、重要性抽样(importancesampling)
6、马尔科夫链,马尔科夫稳态
7、mcmc——metropolis-hasting算法
8、mcmc——gibbssampling算法
1、蒙特卡洛数值积分如果我们要求f(x)的积分,如
而f(x)的形式比较复杂积分不好求,则可以通过数值解法来求近似的结果。
常用的方法是蒙特卡洛积分:
这样把q(x)看做是x在区间内的概率分布,而把前面的分数部门看做一个函数,然后在q(x)下抽取n个样本,当n足够大时,可以用采用均值来近似:
因此只要q(x)比较容易采到数据样本就行了。
随机模拟方法的核心就是如何对一个概率分布得到样本,即抽样(sampling)。
下面我们将介绍常用的抽样方法。
2、均匀分布,box-muller变换在计算机中生成[0,1]之间的伪随机数序列,就可以看成是一种均匀分布。
而随机数生成方法有很多,最简单的如:
当然计算机产生的随机数都是伪随机数,不过一般也就够用了。
[box-muller变换]如果随机变量u1,u2独立且u1,u2?
?
uniform[0,1],
则z0,z1独立且服从标准正态分布。
3、montecarloprinciplemontecarlo抽样计算随即变量的期望值是接下来内容的重点:
x表示随即变量,服从概率分布p(x),那么要计算f(x)的期望,只需要我们不停从p(x)中抽样xi,然后对这些f(xi)取平均即可近似f(x)的期望。
4、接受-拒绝抽样(acceptance-rejectionsampling)[2]很多实际问题中,p(x)是很难直接采样的的,因此,我们需要求助其他的手段来采样。
既然p(x)太复杂在程序中没法直接采样,那么我设定一个程序可抽样的分布q(x)比如高斯分布,然后按照一定的方法拒绝某些样本,达到接近p(x)分布的目的,其中q(x)叫做proposaldistribution。
具体操作如下,设定一个方便抽样的函数q(x),以及一个常量k,使得p(x)总在kq(x)的下方。
(参考上图)
x轴方向:
从q(x)分布抽样得到a。
(如果是高斯,就用之前说过的trickyandfaster的算法更快)y轴方向:
从均匀分布(0,kq(a))中抽样得到u。
如果刚好落到灰色区域:
up(a),拒绝,否则接受这次抽样重复以上过程在高维的情况下,rejectionsampling会出现两个问题,第一是合适的q分布比较难以找到,第二是很难确定一个合理的k值。
这两个问题会导致拒绝率很高,无用计算增加。
5、重要性抽样(importancesampling)[2]importancesampling也是借助了容易抽样的分布q(proposaldistribution)来解决这个问题,直接从公式出发:
其中,p(z)/q(z)可以看做importanceweight。
我们来考察一下上面的式子,p和f是确定的,我们要确定的是q。
要确定一个什么样的分布才会让采样的效果比较好呢?
直观的感觉是,样本的方差越小期望收敛速率越快。
比如一次采样是0,一次采样是1000,平均值是500,这样采样效果很差,如果一次采样是499,一次采样是501,你说期望是500,可信度还比较高。
在上式中,我们目标是pf/q方差越小越好,所以|pf|大的地方,proposaldistributionq(z)也应该大。
举个稍微极端的例子:
第一个图表示p分布,第二个图的阴影区域f=1,非阴影区域f=0,那么一个良好的q分布应该在左边箭头所指的区域有很高的分布概率,因为在其他区域的采样计算实际上都是无效的。
这表明importancesampling有可能比用原来的p分布抽样更加有效。
但是可惜的是,在高维空间里找到一个这样合适的q非常难。
即使有adaptiveimportancesampling和sampling-importance-resampling(sir)的出现,要找到一个同时满足easytosample并且goodapproximations的proposaldistribution,itisoftenimpossible!
6、马尔科夫链,马尔科夫稳态在讲蒙特卡洛方法之前,必须要先讲一下马尔科夫链;马氏链的数学定义:
也就是说前一个状态只与当前状态有关,而与其他状态无关,markovchain体现的是状态空间的转换关系,下一个状态只决定与当前的状态(可以联想网页爬虫原理,根据当前页面的超链接访问下一个网页)。
如下图:
举一个例子,如果当前状态为u(x)=(0.5,0.2,0.3),那么下一个矩阵的状态就是u(x)t=(0.18,0.64,0.18),依照这个转换矩阵一直转换下去,最后的系统就趋近于一个稳定状态(0.22,0.41,0.37)(此处只保留了两位有效数字)。
而事实证明无论你从那个点出发,经过很长的markovchain之后都会汇集到这一点。
[2]
再举一个例子,社会学家经常把人按其经济状况分成3类:
下层(lower-class)、中层(middle-class)、上层(upper-class),我们用1,2,3分别代表这三个阶层。
社会学家们发现决定一个人的收入阶层的最重要的因素就是其父母的收入阶层。
如果一个人的收入属于下层类别,那么他的孩子属于下层收入的概率是0.65,属于中层收入的概率是0.28,属于上层收入的概率是0.07。
事实上,从父代到子代,收入阶层的变化的转移概率如下
使用矩阵的表示方式,转移概率矩阵记为
我们发现从第7代人开始,这个分布就稳定不变了,事实上,在这个问题中,从任意初始概率分布开始都会收敛到这个上面这个稳定的结果。
注:
要求图是联通的(没有孤立点),同时不存在一个联通的子图是没有对外的出边的(就像黑洞一样)。
这个马氏链的收敛定理非常重要,所有的mcmc(markovchainmontecarlo)方法都是以这个定理作为理论基础的。
这个绝妙的想法在1953年被metropolis想到了,为了研究粒子系统的平稳性质,metropolis考虑了物理学中常见的波尔兹曼分布的采样问题,首次提出了基于马氏链的蒙特卡罗方法,即metropolis算法,并在最早的计算机上编程实现。
metropolis算法是首个普适的采样方法,并启发了一系列mcmc方法,所以人们把它视为随机模拟技术腾飞的起点。
metropolis的这篇论文被收录在《统计学中的重大突破》中,metropolis算法也被遴选为二十世纪的十个最重要的算法之一。
我们接下来介绍的mcmc算法是metropolis算法的一个改进变种,即常用的metropolis-hastings算法。
由上一节的例子和定理我们看到了,马氏链的收敛性质主要由转移矩阵p决定,所以基于马氏链做采样的关键问题是如何构造转移矩阵p,使得平稳分布恰好是我们要的分布p(x)。
如何能做到这一点呢?
我们主要使用如下的定理。
马氏链转移和接受概率
假设我们已经有一个转移矩阵q(对应元素为q(i,j)),把以上的过程整理一下,我们就得到了如下的用于采样概率分布p(x)的算法。
8、mcmc——gibbssampling算法平面上马氏链转移矩阵的构造
以上算法收敛后,得到的就是概率分布p(x1,x2,?
?
xn)的样本,当然这些样本并不独立,但是我们此处要求的是采样得到的样本符合给定的概率分布,并不要求独立。
同样的,在以上算法中,坐标轴轮换采样不是必须的,可以在坐标轴轮换中引入随机性,这时候转移矩阵q中任何两个点的转移概率中就会包含坐标轴选择的概率,而在通常的gibbssampling算法中,坐标轴轮换是一个确定性的过程,也就是在给定时刻t,在一根固定的坐标轴上转移的概率是1。
参考资料[1]
[3]http:
//cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/
[4]anintroductiontomcmcformachinelearning,2003
[5]introductiontomontecarlomethods
【篇二:
gibbssampling例子】
计算机可以使用一种随机算法来计算圆周率pi,方法是在边长为d正方形的范围内不断地产生随机数,正方形内切一个直径为d的圆,设c为落入这个圆内点的个数,s为正方形内所有点的个数,则:
这就是蒙特卡洛法,每次产生的随机数就是一次sampling。
2、为什么需要sampling
设进行了10次抛硬币实验,结果是hhhhtttt(h代表正面,t代表反面),已知硬币正反面是不均匀的,要求估计下一次抛硬币的结果。
使用最大似然法进行估计:
第一步使用最大似然的原则估计出出现正面的概率:
然后用这个用最大似然估计出来pi的去预测下次出现正反面的结果。
使用最大后验概率原则进行估计:
前面两种方法都是一种通过最大似然、最大后验概率计算出一个确定的,然后使用它作为判断下一次结果的依据。
如果考虑pi不是一个确定的数,而是一个分布的情况:
通过对pi积分,考虑的不是一个确定的数,而是一个分布,但是如何算这个积分呢?
之前提到的计算圆周率的例子在数学上算法就是积分法,可以通过积分计算出圆的面积,进而得到圆周率,而通过sampling的方法可以计算这个pi,这样可以避免复杂的积分运算。
同样在这里也可以使用sampling的方法去掉这个积分运算:
通过计算上式就可以避免计算积分。
现在需要只是按照一定规则选取:
做马尔科夫假设,即转移概率只依赖于前一个状态:
这就是蒙特卡洛马尔科夫法。
gibbssampling是蒙特卡洛马尔科夫法的一个特例,即每次抽样的时候都把最新的结果考虑进去,而不是同步更新
介个就是gibbssampling了!
3、sampling实战
最后我基于gibbs抽样的方法实现了一个naivebayes分类器,并用最大似然进行参数估计的naivebayes分类器进行了对比:
gibbs84.1%
84.6%实现的代码地址:
使用狄利克雷和贝塔分布作为先验,有很多参数可调,懒得来回调了,使用产生式模型相当于对数据集合加入了先验知识,当这种先验知识符合数据分布的时候,会对实验结果起到正的作用,当先验知识不符合实际情况时,可能会起到反的作用。
【篇三:
gibbssampling例子】
本文是对参考资料中多篇关于sampling的内容进行总结+搬运,方便以后自己翻阅。
其实参考资料中的资料写的比我好,大家可以看一下!
好东西多分享!
prml的第11章也是sampling,有时间后面写到prml的笔记中去:
)
随机模拟也可以叫做蒙特卡罗模拟(montecarlosimulation)。
这个方法的发展始于20世纪40年代,和原子弹制造的曼哈顿计划密切相关,当时的几个大牛,包括乌拉姆、冯.诺依曼、费米、费曼、nicholasmetropolis,在美国洛斯阿拉莫斯国家实验室研究裂变物质的中子连锁反应的时候,开始使用统计模拟的方法,并在最早的计算机上进行编程实现。
[3]
随机模拟中有一个重要的问题就是给定一个概率分布p(x),我们如何在计算机中生成它的样本。
一般而言均匀分布uniform(0,1)的样本是相对容易生成的。
通过线性同余发生器可以生成伪随机数,我们用确定性算法生成[0,1]之间的伪随机数序列后,这些序列的各种统计指标和均匀分布uniform(0,1)的理论计算结果非常接近。
这样的伪随机序列就有比较好的统计性质,可以被当成真实的随机数使用。
下面总结这么几点:
1、蒙特卡洛数值积分
2、均匀分布,box-muller变换
3、montecarloprinciple
4、接受-拒绝抽样(acceptance-rejectionsampling)
5、重要性抽样(importancesampling)
6、马尔科夫链,马尔科夫稳态
7、mcmcmetropolis-hasting算法
8、mcmcgibbssampling算法
1、蒙特卡洛数值积分如果我们要求f(x)的积分,如
而f(x)的形式比较复杂积分不好求,则可以通过数值解法来求近似的结果。
常用的方法是蒙特卡洛积分:
这样把q(x)看做是x在区间内的概率分布,而把前面的分数部门看做一个函数,然后在q(x)下抽取n个样本,当n足够大时,可以用采用均值来近似:
因此只要q(x)比较容易采到数据样本就行了。
随机模拟方法的核心就是如何对一个概率分布得到样本,即抽样(sampling)。
下面我们将介绍常用的抽样方法。
2、均匀分布,box-muller变换在计算机中生成[0,1]之间的伪随机数序列,就可以看成是一种均匀分布。
而随机数生成方法有很多,最简单的如:
当然计算机产生的随机数都是伪随机数,不过一般也就够用了。
[box-muller变换]如果随机变量u1,u2独立且u1,u2uniform[0,1],
则z0,z1独立且服从标准正态分布。
3、montecarloprinciplemontecarlo抽样计算随即变量的期望值是接下来内容的重点:
x表示随即变量,服从概率分布p(x),那么要计算f(x)的期望,只需要我们不停从p(x)中抽样xi,然后对这些f(xi)取平均即可近似f(x)的期望。
4、接受-拒绝抽样(acceptance-rejectionsampling)[2]很多实际问题中,p(x)是很难直接采样的的,因此,我们需要求助其他的手段来采样。
既然p(x)太复杂在程序中没法直接采样,那么我设定一个程序可抽样的分布q(x)比如高斯分布,然后按照一定的方法拒绝某些样本,达到接近p(x)分布的目的,其中q(x)叫做proposaldistribution。
具体操作如下,设定一个方便抽样的函数q(x),以及一个常量k,使得p(x)总在kq(x)的下方。
(参考上图)
x轴方向:
从q(x)分布抽样得到a。
(如果是高斯,就用之前说过的trickyandfaster的算法更快)y轴方向:
从均匀分布(0,kq(a))中抽样得到u。
如果刚好落到灰色区域:
up(a),拒绝,否则接受这次抽样重复以上过程在高维的情况下,rejectionsampling会出现两个问题,第一是合适的q分布比较难以找到,第二是很难确定一个合理的k值。
这两个问题会导致拒绝率很高,无用计算增加。
5、重要性抽样(importancesampling)[2]importancesampling也是借助了容易抽样的分布q(proposaldistribution)来解决这个问题,直接从公式出发:
其中,p(z)/q(z)可以看做importanceweight。
我们来考察一下上面的式子,p和f是确定的,我们要确定的是q。
要确定一个什么样的分布才会让采样的效果比较好呢?
直观的感觉是,样本的方差越小期望收敛速率越快。
比如一次采样是0,一次采样是1000,平均值是500,这样采样效果很差,如果一次采样是499,一次采样是501,你说期望是500,可信度还比较高。
在上式中,我们目标是pf/q方差越小越好,所以|pf|大的地方,proposaldistributionq(z)也应该大。
举个稍微极端的例子:
第一个图表示p分布,第二个图的阴影区域f=1,非阴影区域f=0,那么一个良好的q分布应该在左边箭头所指的区域有很高的分布概率,因为在其他区域的采样计算实际上都是无效的。
这表明importancesampling有可能比用原来的p分布抽样更加有效。
但是可惜的是,在高维空间里找到一个这样合适的q非常难。
即使有adaptiveimportancesampling和sampling-importance-resampling(sir)的出现,要找到一个同时满足easytosample并且goodapproximations的proposaldistribution,itisoftenimpossible!
6、马尔科夫链,马尔科夫稳态在讲蒙特卡洛方法之前,必须要先讲一下马尔科夫链;马氏链的数学定义:
也就是说前一个状态只与当前状态有关,而与其他状态无关,markovchain体现的是状态空间的转换关系,下一个状态只决定与当前的状态(可以联想网页爬虫原理,根据当前页面的超链接访问下一个网页)。
如下图:
举一个例子,如果当前状态为u(x)=(0.5,0.2,0.3),那么下一个矩阵的状态就是u(x)t=(0.18,0.64,0.18),依照这个转换矩阵一直转换下去,最后的系统就趋近于一个稳定状态(0.22,0.41,0.37)(此处只保留了两位有效数字)。
而事实证明无论你从那个点出发,经过很长的markovchain之后都会汇集到这一点。
[2]
再举一个例子,社会学家经常把人按其经济状况分成3类:
下层(lower-class)、中层(middle-class)、上层(upper-class),我们用1,2,3分别代表这三个阶层。
社会学家们发现决定一个人的收入阶层的最重要的因素就是其父母的收入阶层。
如果一个人的收入属于下层类别,那么他的孩子属于下层收入的概率是0.65,属于中层收入的概率是0.28,属于上层收入的概率是0.07。
事实上,从父代到子代,收入阶层的变化的转移概率如下
使用矩阵的表示方式,转移概率矩阵记为
我们发现从第7代人开始,这个分布就稳定不变了,事实上,在这个问题中,从任意初始概率分布开始都会收敛到这个上面这个稳定的结果。
注:
要求图是联通的(没有孤立点),同时不存在一个联通的子图是没有对外的出边的(就像黑洞一样)。
这个马氏链的收敛定理非常重要,所有的mcmc(markovchainmontecarlo)方法都是以这个定理作为理论基础的。
对于给定的概率分布p(x),我们希望能有便捷的方式生成它对应的样本。
由于马氏链能收敛到平稳分布,于是一个很的漂亮想法是:
如果我们能构造一个转移矩阵为p的马氏链,使得该马氏链的平稳分布恰好是p(x),那么我们从任何一个初始状态x0出发沿着马氏链转移,得到一个转移序列x0,x1,x2,?
?
xn,xn+1?
?
,如果马氏链在第n步已经收敛了,于是我们就得到了(x)的样本xn,xn+1?
?
。
这个绝妙的想法在1953年被metropolis想到了,为了研究粒子系统的平稳性质,metropolis考虑了物理学中常见的波尔兹曼分布的采样问题,首次提出了基于马氏链的蒙特卡罗方法,即metropolis算法,并在最早的计算机上编程实现。
metropolis算法是首个普适的采样方法,并启发了一系列mcmc方法,所以人们把它视为随机模拟技术腾飞的起点。
metropolis的这篇论文被收录在《统计学中的重大突破》中,metropolis算法也被遴选为二十世纪的十个最重要的算法之一。
我们接下来介绍的mcmc算法是metropolis算法的一个改进变种,即常用的metropolis-hastings算法。
由上一节的例子和定理我们看到了,马氏链的收敛性质主要由转移矩阵p决定,所以基于马氏链做采样的关键问题是如何构造转移矩阵p,使得平稳分布恰好是我们要的分布p(x)。
如何能做到这一点呢?
我们主要使用如下的定理。
马氏链转移和接受概率
假设我们已经有一个转移矩阵q(对应元素为q(i,j)),把以上的过程整理一下,我们就得到了如下的用于采样概率分布p(x)的算法。
8、mcmcgibbssampling算法平面上马氏链转移矩阵的构造
以上算法收敛后,得到的就是概率分布p(x1,x2,?
?
xn)的样本,当然这些样本并不独立,但是我们此处要求的是采样得到的样本符合给定的概率分布,并不要求独立。
同样的,在以上算法中,坐标轴轮换采样不是必须的,可以在坐标轴轮换中引入随机性,这时候转移矩阵q中任何两个点的转移概率中就会包含坐标轴选择的概率,而在通常的gibbssampling算法中,坐标轴轮换是一个确定性的过程,也就是在给定时刻t,在一根固定的坐标轴上转移的概率是1。
[1]
[3]http:
//cos.name/2013/01/lda-math-mcmc-and-gibbs-sampling/
[4]anintroductiontomcmcformachinelearning,2003
[5]introductiontomontecarlomethods
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gibbssampling 例子