LDA学习之beta分布和Dirichlet分布
---恢复内容开始---
今天学习LDA主题模型,看到Beta分布和Dirichlet分布一脸的茫然,这俩玩意怎么来的,再网上查阅了很多资料,当做读书笔记记下来:
先来几个名词:
共轭先验:
在贝叶斯统计理论中,如果某个随机变量Θ的后验概率 p(θ|x)和他的先验概率p(θ)属于同一个分布簇的,那么称p(θ|x)和p(θ)为共轭分布,同时,也称p(θ)为似然函数p(x|θ)的共轭先验。简言之,共轭就是我俩天生一对。我们后面会看到,多项分布的先验概率分布和其后验概率分布就是共轭的。
ok,下面我们来看看啥叫分布的分布:
还是抛硬币的实验,假设抛了5次硬币,出现了3次正面,你根据极大似然估计得出,抛一次硬币出现正面的概率是0.6。
但是这是绝对的吗?如果出现了2次正面呢?那得到的抛一次硬币出现正面的概率就是0.4了。
(下图是极大似然估计计算的过程)
然后你就会想到,哦,也许实际的概率是满足一定的分布的,我们实际实验的观测值得到的结果总是出自这个分布,一般都在最大值附近出现,比如0.5。
因此,人们引入了概率分布的先验概率:
比如说,在上述例子中,你觉得抛硬币出现正面的分布如下,他在0.8取得了最大值,也就是我们在抛硬币前认为这个硬币的若干组观测实验后计算的结果大部分在0.8附近。
好,假设你做了一组观测实验,我们可以通过上面定义的后验概率计算公式计算根据这组观测得到的后验概率,换言之,你调整了抛一次硬币出现正面的概率的分布,
或者说分布的分布。
好,下面问题来了,我怎么知道(假设)先验概率分布呢,这是个好问题,实际上可以任何种类的概率分布。你吐吐舌头,这和没说有啥区别。
别急,选择权在我们手中,既然可以选择任何种类的概率分布,我们干脆选一个性质好点的,容易计算的分布咯。
这个分布就是Beta分布:,其中,
,x是[0 1]的随机变量。
Beta分布不同参数下的结果如下图所示,可以看出,Beta分布形态各异,可以是凹的、凸的、单调上升的、单调下降的;可以是曲线也可以是直线,而均匀分布也是特殊的Beta分布。由于Beta 分布能够拟合如此之多的形状,因此它在统计数据拟合中被广泛使用。

好,还是上面抛硬币的例子,可以得到:(其中X是5次抛硬币试验中出现三次的观测事件)
下面计算P(X):即X在先验概率下各种情况的条件概率和(或积分)
再计算后验概率就可以得到:
这里,2=5-3,也就是后验概率为,其中
。
从上面的公式我们看到,抛一次硬币出现正面的概率的 先验概率分布和其对应的后验概率分布是共轭的,这就会选择Beta分布的好处所在。
还是上面的例子,新的后验概率为:
即,新的最大值在实际观测得到的似然函数值0.6和先验概率中的0.8之间,这是根据先验概率和观测结果共同得到的更具肯定性的结论。
上面讨论了二维的情况,也就是只有两个参数(抛硬币出现正面的概率和抛硬币出现反面的概率),他们相加为1,如果有多个参数呢?(比如,掷一次骰子每个面出现的概率)。
这个时候使用同样的过程使用的就是Dirichlet Distribution。
假设有先验分布(比如,对应掷骰子的例子,k为6):
观测实验得到的似然函数为:(多项分布计算公式)
那么可以计算得到后验概率分布为:
下面给出Dirichlet分布的概率密度函数为:
,其中
比如三维的Dirichlet Distribution如下:

最后在概率论中,Dirichlet Distribution和Beta Distribution都叫做Conjugate Prior。根据不同的likelihood function,选择对应的conjugate prior作为对p(\theta)事先的估计(也就是先验概率分布)。
一个好的选择如下,可见二项分布使用的是Beta Distribution,多项分布使用的是Dirichlet Distribution。
可以看出,Beta分布是针对二项分布B(n,P)中参数P的分布的估计,其先验分布和后验分布是共轭的。而Dirichlet分布是针对多项分布中k各参数的估计,其先验分布和后验分布也是共轭的。这样,我们就可以用Beta分布去计算二项分布中的P,用Dirichlet分布去估计多项分布中的参数。
参考资料:
http://maider.blog.sohu.com/306392863.html
http://cos.name/2013/01/lda-math-beta-dirichlet/#more-6953
http://blog.163.com/zzz216@yeah/blog/static/162554684201381382117133/
etc...
LDA学习之beta分布和Dirichlet分布的更多相关文章
- Beta分布和Dirichlet分布
在<Gamma函数是如何被发现的?>里证明了\begin{align*} B(m, n) = \int_0^1 x^{m-1} (1-x)^{n-1} \text{d} x = \frac ...
- 伯努利分布、二项分布、多项分布、Beta分布、Dirichlet分布
1. 伯努利分布 伯努利分布(Bernoulli distribution)又名两点分布或0-1分布,介绍伯努利分布前首先需要引入伯努利试验(Bernoulli trial). 伯努利试验是只有两种可 ...
- 伯努利分布、二项分布、Beta分布、多项分布和Dirichlet分布与他们之间的关系,以及在LDA中的应用
在看LDA的时候,遇到的数学公式分布有些多,因此在这里总结一下思路. 一.伯努利试验.伯努利过程与伯努利分布 先说一下什么是伯努利试验: 维基百科伯努利试验中: 伯努利试验(Bernoulli tri ...
- mahout系列----Dirichlet 分布
Dirichlet分布可以看做是分布之上的分布.如何理解这句话,我们可以先举个例子:假设我们有一个骰子,其有六面,分别为{1,2,3,4,5,6}.现在我们做了10000次投掷的实验,得到的实验结果是 ...
- Dirichlet分布深入理解
Dirichlet分布 我们把Beta分布推广到高维的场景,就是Dirichlet分布.Dirichlet分布定义如下 Dirichlet分布与多项式分布共轭.多项式分布定义如下 共轭关系表示如下 D ...
- LDA学习小记
看到一段对主题模型的总结,感觉很精辟: 如何找到文本隐含的主题呢?常用的方法一般都是基于统计学的生成方法.即假设以一定的概率选择了一个主题,然后以一定的概率选择当前主题的词.最后这些词组成了我们当前的 ...
- 关于Beta分布、二项分布与Dirichlet分布、多项分布的关系
在机器学习领域中,概率模型是一个常用的利器.用它来对问题进行建模,有几点好处:1)当给定参数分布的假设空间后,可以通过很严格的数学推导,得到模型的似然分布,这样模型可以有很好的概率解释:2)可以利用现 ...
- LDA-math-认识Beta/Dirichlet分布
http://cos.name/2013/01/lda-math-beta-dirichlet/#more-6953 2. 认识Beta/Dirichlet分布2.1 魔鬼的游戏—认识Beta 分布 ...
- (转)Gamma分布,Beta分布,Multinomial多项式分布,Dirichlet狄利克雷分布
1. Gamma函数 首先我们可以看一下Gamma函数的定义: Gamma的重要性质包括下面几条: 1. 递推公式: 2. 对于正整数n, 有 因此可以说Gamma函数是阶乘的推广. 3. 4. ...
随机推荐
- Zipline入门教程
Zipline Beginner Tutorial Basics 基础 Zipline is an open-source algorithmic trading simulator written ...
- (转载)移动Web开发技巧汇总
META相关 1. 添加到主屏后的标题(IOS) <meta name="apple-mobile-web-app-title" content="标题" ...
- Python高级特性(1):Iterators、Generators和itertools(转)
译文:Python高级特性(1):Iterators.Generators和itertools [译注]:作为一门动态脚本语言,Python 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...
- 转载:futex同步机制详解
在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序", ...
- JXL导出Excel工具类
将Excel中的数据读取到List<Map<String, Object>>集合中 package com.mvc.util; import java.io.File; ...
- 01-开始使用django(全、简)
目录 (一)创建项目 1.生成django默认目录 2.创建应用目录 3.安装应用 4.配置使用mysql数据库 5.运行轻量级web服务器,预览 (二)设计模型 1.在models.py中定义模型类 ...
- linux使用nohup命令后台运行程序
在linux服务器上搭建web服务器,用ssh客户端登陆后使用./startservice.sh脚本启动服务,但是当ssh断开连接后起的服务也会停掉. 这时可以用nohup ./startservic ...
- C的指针疑惑:C和指针10(结构和联合)
结构也可以作为传递给函数的参数,它们也可以作为返回值从函数返回,相同类型的结构体变量相互之间可以赋值. 申明结构时使用另一种良好技巧是用typedef创建一种新的类型. typedef struct{ ...
- 记录:正确率、召回率、F值
因为不理解召回率,所以去查看了一些资料.特此记录一下自己的理解,以便以后查看. 说明 正确率=查出来正确的样本数/全部查出来的样本数 (也可以理解为查准率) 召回率=查出来正确的样本数/数据集里全部正 ...
- JavaScript:学习笔记(9)——Promise对象
JavaScript:学习笔记(9)——Promise对象 引入Promise Primose是异步编程的一种解决方案,比传统的解决方案回调函数和事件更加合理和强大.如下面为基于回调函数的Ajax操作 ...