首页 > 代码库 > 大数据处理之道 (Gibbs Sampling)

大数据处理之道 (Gibbs Sampling)

一:简介以及学习的途径

(1)吉布斯采样(Gibbs Sampling)及相关算法  (学习向Gibbs sampling, EM,  MCMC算法 等的好地方)

       1) 推荐大家读Bishop的Pattern Recognition and Machine Learning,讲的很清楚,偏理论一些;

       2) 读artificial Intelligence,2、3版,都有;

       3) 如果英语好的话,最方便的就是查wikipedia,这个说的最清楚(研究生推荐读一读这个)

       4)不要什么都百度去,百度在学术方面目前做的非常差的;Google 学术非常好的,Google 技术问题也是非常棒的,国外的开源网站和社区更多,不像国内的动不动就让你注册,让你付费。

(2)简介:

通俗点的解释一下,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)抽样可以在给定协方差数据和参数的先验分布条件下获得结构方程参数的后验分布样本。参数的点估计、区间估计和标准误就可以用这些样本数据计算。

吉布斯采样是生成马尔科夫链的一种方法,生成的马尔科夫链可以用来做蒙特卡洛仿真,从而求得一个较复杂的多元分布。

吉布斯采样的具体做法:假设有一个k维的随机向量,现想要构造一条有n个样本的k维向量(n样本马尔科夫序列),那么(随机)初始化一个k维向量,然后固定这个向量其中的k-1个元素,抽取剩下的那个元素(生成给定后验的随机数),这样循环k次,就把整个向量更新了一遍,也就是生成了一个新的样本,把这个整体重复n次就得到了一条马尔科夫链

二:所思所想

 (1)总是,感觉有一种罪恶感,自己现在苦学的C+stl人家大三已经全部自己实现了;我现在学的AKI中文分词工具,人家课程设计就是它;我早就的HTMLparser是人家当年的课程设计;情感分析也是课程设计,各种分类聚类是人家当年的毕设,基于Nutch的搜索的Hadoop人家的毕设;我难道是在弥补我考研所花费的一年时光吗?

(2)研究生到底该干什么?不能仅仅多了一张证件纸吧?难道是中国教育体质出了问题?研究生得做研究,学会系统的分析剖析问题,而非简简单单的机械的写几行代码,而是开阔眼界,多学几个模型原理及其应用,学会那些模型的核心思想。

(3)这可能变得非常自私,要是这样你给导师带来了什么?你给实验室带来了什么?_?问这问题的人一定是目光短浅的人,从长远来看,这样的人给学校给国家带来的利益更大,当然没有直接的把导师的钱包变鼓起来,因为他没有对导师的攻城写过一行代码,没有设计过一份文档

(4)导师亏了,那还行?因为导师我是行使权力的人,对我不利,不能给我带来利益,这肯定不行,不能让他毕业,尽管他将来能给学校国家带来更大的利益和贡献,但那跟我有毛关系!

大数据处理之道 (Gibbs Sampling)