• 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

  • 相关阅读:
    libnids-1.24 使用源码问题
    Linux学习man page
    shell 脚本,提取文件中的内容
    shell中的语法(1)
    python 爬取百度翻译进行中英互译
    matlab等高线绘制
    matlab 对tif数据高程图的处理分析
    python网络爬虫与信息提取 学习笔记day3
    python网络爬虫与信息提取 学习笔记day2
    python网络爬虫与信息提取 学习笔记day1
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2684771.html
Copyright © 2020-2023  润新知