一直在用LDA,但是一直不太理解其中Dirichlet抽样是个什么样的东西,于是画了一些时间好好好看了看关于dirichlet的理解。感觉还挺有收货,这里先总结一些资料的出处,希望对大家有帮助:
http://cos.name/2013/01/lda-math-gamma-function/
这个讲解讲的比较详细,从最基础的gamma函数开始,然后从Beta分布扩展到了Dirichlet的分布。
http://videolectures.net/mlss07_teh_dp/
这里是美国教授的授课视频,详细讲了Dirichlet的分布及其过程。讲的很好,网址上有PPT的下载,对应的matlab的下载需要去搜索作者的主页
主页上有源代码的下载地址,如果找不到,请留言。我可以发邮件给各位(因为我也突然找不到地址了)
其他的几个网页:
http://hi.baidu.com/zentopus/item/46a622f5ef13e4c5a835a28e
http://www.xperseverance.net/blogs/2012/03/516/
主要就是这么几个了,其他的大部分其实都是转载这几个作者的东西。
然后我来说说自己的一些理解:
Dirichlet分布其实就是一个概率分布,他在性质上跟二项分布,Beta分布其实没有什么区别,都是概率分布。但是他有具有一些特殊的性质。
例如它的线型是不定的。就像Beta一样,Beta分布会会根据参数的变化而发生变化。dirichlet也是一样的。他和beta分布最大的不同是,beta分布是在二维空间上。
而dirichlet是beta的一个扩展,他是在一个多维空间上的分布。这就可以得到dirichlet的一个用处了,因为他的线型是不定的,不同的参数会得到不同的结果
因此我们可以利用dirichlet进行曲线拟合,例如水文观测,地震数据等的数据拟合中。
其次因为参数的变化对dirichlet分布有较大的影响,因此当我们通过dirichlet分布去采集样本的时候,大部分情况我们会得到概率比较大的那部分的数据。
因此dirichlet分布同意可以作为一个分类器其使用。例如典型的LDA。
同样,因为dirichlet的先验分布的特性,大部分工作会利用dirichlet去进行参数估计。也就是机器学习上面。
例如我们有了观测样本x和结果y,需要去建立一个函数f,使得y=f(x)。
那么如何得到这个函数f的参数呢?我们需要去假设参数,然后通过dirichlet的分布去采用并估算结果。修改参数,知道参数稳定在一定范围内。
这个过程具体可以看上面说提到的PPT。里面有详细的讲解。
大家再看dirichlet的时候,总是会听到中餐馆拉,steak-breaking等的词,这是什么东西?
我刚开始一直没办法理解,感觉这个东西跟dirichlet好像没什么关系,公式也不一样。
其实,很容易,我们在学习二项分布的时候,提到了抛硬币,中餐馆其实跟这个类似,
就是举了一个例子,来告诉我们dirichlet分布的来源。之所以感觉这些公式跟原始的dirichlet不一样。是因为他是dirichlet的一个实例化。
他的参数更具体,而让大家觉的陌生。大家理解为他是dirichlet的一个例子,然后再去看就会有感觉了。
原文地址:http://www.xuebuyuan.com/916796.html
谢谢