zoukankan      html  css  js  c++  java
  • 吉布斯采样的简单描述

    几个可以学习gibbs sampling的方法
    1,读Bishop的Pattern Recognition and Machine Learning,讲的很清楚,但是我记得好像没有例子。
    2,读artificial Intelligence,2、3版,都有。但是我没读过。
    3,最方便的,查wiki,这个说的最清楚。

    这里通俗点的解释一下。首先,什么是sampling。sampling就是以一定的概率分布,看发生什么事件。举一个例子。甲只能E:吃饭、学习、打球,时间T:上午、下午、晚上,天气W:晴朗、刮风、下雨。现在要一个sample,这个sample可以是:打球+下午+晴朗。。。

    问题是我们不知道p(E,T,W),或者说,不知道三件事的联合分布。当然,如果知道的话,就没有必要用gibbs sampling了。但是,我们知道三件事的conditional distribution。也就是说,p(E|T,W),p(T|E,W),p(W|E,T)。现在要做的就是通过这三个已知的条件分布,再用gibbs sampling的方法,得到joint distribution。

    具体方法。首先随便初始化一个组合,i.e. 学习+晚上+刮风,然后依条件概率改变其中的一个变量。具体说,假设我们知道晚上+刮风,我们给E生成一个变量,比如,学习-》吃饭。我们再依条件概率改下一个变量,根据学习+刮风,把晚上变成上午。类似地,把刮风变成刮风(当然可以变成相同的变量)。这样学习+晚上+刮风-》吃饭+上午+刮风。

    同样的方法,得到一个序列,每个单元包含三个变量,也就是一个马尔可夫链。然后跳过初始的一定数量的单元(比如100个),然后隔一定的数量取一个单元(比如隔20个取1个)。这样sample到的单元,是逼近联合分布的。

    • 什么是Gibbs Sampling

    Gibbs Sampling是MCMC算法中的一种,用来构造多变量概率分布的随机样本,比如构造两个或多个变量的联合分布,求积分,期望。

    • 为什么需要Gibbs Sampling

    这不是废话,肯定是积分,期望或者联合分布很难计算出来,通常情况下当前面三个问题是NP问题时才需要Gibbs Sampling。不然的话,直接计算就可以了嘛,既准确又快速,干嘛还要Gibbs Sampling呢。补充一句Gibbs Sampling只是(也只能)到近似解。

    • 应用场景

    a、积分,期望,样本概率很难计算出来;b、条件概率很容易计算。具体一点的例子:受限玻尔兹曼机(RBM)的训练,贝叶斯网络,LDA都用到Gibbs Sampling。

    • 为什么Gibbs Sampling有效

    当Gibbs Sapling算法执行多次之后,产生的样本服从真实样本的分布,即相当于直接从联合分布中采样。

    • Gibbs Sampling 算法 

    二维Gibbs Sampling的马氏链转移

     

    n维Gibbs Sampling算法

     观点:

    1. We have a representation of p(x) and f(x), but integration is intractable. It turns out that if correctly sampled, only 10-20 points can be sufficient to estimate the mean and variance of a distribution. Of course, Samples must be independently drawn; Expectation may be dominated by regions of high probability, or high function values.[1]

    Reference

    [1] Lecture 1: Introduction - CUNY 

    [2] LDA数学八卦

    后记:为什么要写关于Gibbs Sampling的文章呢?首先Gibbs Sampling是有用滴,Gibbs Sampling在机器学习中主要用于学习阶段的推理,比如求期望(平均值)和积分;再者网上的关于Gibbs Sampling的博客写得不好,资料也不多。

  • 相关阅读:
    关于数据库 长度和小数点的关系和坑
    温故而知新,jquery选择器$=
    局域网访问本地localhost页面
    解决谷歌浏览器和360浏览器 input 自动填充淡黄色背景色的问题
    抢月饼 浏览器插件开发
    css 多行溢出
    ss服务待研究
    NUnit笔记
    5分钟实现VS2010整合NUnit进行单元测试
    vs2010中使用Nunit测试c#代码结果的正确性
  • 原文地址:https://www.cnblogs.com/peizhe123/p/5800711.html
Copyright © 2011-2022 走看看