zoukankan      html  css  js  c++  java
  • Gibbs Sampling [转]

    1、Sampling初探:

    计算机可以使用一种随机算法来计算圆周率PI,方法是在边长为d正方形的范围内不断地产生随机数,正方形内切一个直径为d的圆,设C为落入这个圆内点的个数,S为正方形内所有点的个数,则:

    这就是蒙特卡洛法,每次产生的随机数就是一次Sampling。

    2、为什么需要sampling

    设进行了10次抛硬币实验,结果是HHHHTTTT(H代表正面,T代表反面),已知硬币正反面是不均匀的,要求估计下一次抛硬币的结果。

    使用最大似然法进行估计:

    第一步使用最大似然的原则估计出出现正面的概率:

    然后用这个用最大似然估计出来PI的去预测下次出现正反面的结果。

    使用最大后验概率原则进行估计:

    前面两种方法都是一种通过最大似然、最大后验概率计算出一个确定的,然后使用它作为判断下一次结果的依据。如果考虑PI不是一个确定的数,而是一个分布的情况:

    通过对PI积分,考虑的不是一个确定的数,而是一个分布,但是如何算这个积分呢?之前提到的计算圆周率的例子在数学上算法就是积分法,可以通过积分计算出圆的面积,进而得到圆周率,而通过sampling的方法可以计算这个PI,这样可以避免复杂的积分运算。同样在这里也可以使用sampling的方法去掉这个积分运算:

    通过计算上式就可以避免计算积分。现在需要只是按照一定规则选取:

    做马尔科夫假设,即转移概率只依赖于前一个状态:

    这就是蒙特卡洛马尔科夫法。

    Gibbs sampling是蒙特卡洛马尔科夫法的一个特例,即每次抽样的时候都把最新的结果考虑进去,而不是同步更新

    介个就是Gibbs sampling了!

    3、sampling实战

    最后我基于Gibbs抽样的方法实现了一个Naive Bayes分类器,并用最大似然进行参数估计的Naive Bayes分类器进行了对比:

    Gibbs 84.1%

    MLE    84.6%

    实现的代码地址:http://code.google.com/p/naive-bayes-gibbs-sampling/

    使用狄利克雷和贝塔分布作为先验,有很多参数可调,懒得来回调了,使用产生式模型相当于对数据集合加入了先验知识,当这种先验知识符合数据分布的时候,会对实验结果起到正的作用,当先验知识不符合实际情况时,可能会起到反的作用。

    [转] http://blog.sina.com.cn/s/blog_8a7a0d5501015bxg.html

  • 相关阅读:
    systemctl命令
    linux下常用命令查看端口占用
    【PostgreSQL】存取jsonb
    tomcat内存溢出之PermGen space
    Spring事务传播机制
    java框架篇---spring aop两种配置方式
    Hibernate一对多实例
    Github 的系统内部都在用什么开源软件?
    这是一个关于软件开发的博客。
    JavaScript中数组的集合和映射
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2684771.html
Copyright © 2011-2022 走看看