LDA-math-认识Beta/Dirichlet分布(1)

来源:互联网 发布:c语言做图形界面 编辑:程序博客网 时间:2024/05/23 19:16

文章转自http://www.52nlp.cn/lda-math-%E8%AE%A4%E8%AF%86betadirichlet%E5%88%86%E5%B8%831

mark 一下

2. 认识Beta/Dirichlet分布
2.1 魔鬼的游戏—认识Beta 分布

统计学就是猜测上帝的游戏,当然我们不总是有机会猜测上帝,运气不好的时候就得揣度魔鬼的心思。有一天你被魔鬼撒旦抓走了,撒旦说:”你们人类很聪明,而我是很仁慈的,和你玩一个游戏,赢了就可以走,否则把灵魂出卖给我。游戏的规则很简单,我有一个魔盒,上面有一个按钮,你每按一下按钮,就均匀的输出一个[0,1]之间的随机数,我现在按10下,我手上有10个数,你猜第7大的数是什么,偏离不超过0.01就算对。“ 你应该怎么猜呢?

从数学的角度抽象一下,上面这个游戏其实是在说随机变量X1,X2,,XniidUniform(0,1),把这n 个随机变量排序后得到顺序统计量 X(1),X(2),X(n), 然后问 X(k) 的分布是什么。

对于不喜欢数学的同学而言,估计每个概率分布都是一个恶魔,那在概率统计学中,均匀分布应该算得上是潘多拉魔盒,几乎所有重要的概率分布都可以从均匀分布Uniform(0,1)中生成出来;尤其是在统计模拟中,所有统计分布的随机样本都是通过均匀分布产生的。

pandora潘多拉魔盒Uniform(0,1)


对于上面的游戏而言 n=10,k=7, 如果我们能求出 X(7) 的分布的概率密度,那么用概率密度的极值点去做猜测就是最好的策略。对于一般的情形,X(k) 的分布是什么呢?那我们尝试计算一下X(k) 落在一个区间 [x,x+Δx] 的概率,也就是求如下概率值

P(xX(k)x+Δx)=?

把 [0,1] 区间分成三段 [0,x),[x,x+Δx],(x+Δx,1],我们先考虑简单的情形,假设n 个数中只有一个落在了区间 [x,x+Δx]内,则因为这个区间内的数X(k)是第k大的,则[0,x)中应该有 k1 个数,(x,1] 这个区间中应该有nk 个数。不失一般性,我们先考虑如下一个符合上述要求的事件E

E={X1[x,x+Δx],Xi[0,x)(i=2,,k),Xj(x+Δx,1](j=k+1,,n)}

beta-game-1事件 E

则有

P(E)=i=1nP(Xi)=xk1(1xΔx)nkΔx=xk1(1x)nkΔx+o(Δx)

o(Δx)表示Δx的高阶无穷小。显然,由于不同的排列组合,即n个数中有一个落在 [x,x+Δx]区间的有n种取法,余下n1个数中有k1个落在[0,x)的有(n1k1)种组合,所以和事件E等价的事件一共有 n(n1k1)个。继续考虑稍微复杂一点情形,假设n 个数中有两个数落在了区间 [x,x+Δx]

E={X1,X2[x,x+Δx],Xi[0,x)(i=3,,k),Xj(x+Δx,1](j=k+1,,n)}

beta-game-2事件E’

则有

P(E)=xk2(1xΔx)nk(Δx)2=o(Δx)

从以上分析我们很容易看出,只要落在[x,x+Δx]内的数字超过一个,则对应的事件的概率就是 o(Δx)。于是
P(xX(k)x+Δx)=n(n1k1)P(E)+o(Δx)=n(n1k1)xk1(1x)nkΔx+o(Δx)

所以,可以得到X(k)的概率密度函数为
f(x)=limΔx0P(xX(k)x+Δx)Δx=n(n1k1)xk1(1x)nk=n!(k1)!(nk)!xk1(1x)nkx[0,1]

利用Gamma 函数,我们可以把 f(x) 表达为
f(x)=Γ(n+1)Γ(k)Γ(nk+1)xk1(1x)nk

还记得神奇的 Gamma 函数可以把很多数学概念从整数集合延拓到实数集合吧。我们在上式中取α=k,β=nk+1, 于是我们得到

f(x)=Γ(α+β)Γ(α)Γ(β)xα1(1x)β1

这个就是一般意义上的 Beta 分布!可以证明,在α,β取非负实数的时候,这个概率密度函数也都是良定义的。

好,我们回到魔鬼的游戏,这n=10,k=7这个具体的实例中,我们按照如下密度分布的峰值去猜测才是最有把握的。

f(x)=10!(6)!(3)!x6(1x)3x[0,1]

然而即便如此,我们能做到一次猜中的概率也不高,很不幸,你第一次没有猜中,魔鬼微笑着说:“我再仁慈一点,再给你一个机会,你按5下这个机器,你就得到了5个[0,1]之间的随机数,然后我可以告诉你这5个数中的每一个,和我的第7大的数相比,谁大谁小,然后你继续猜我手头的第7大的数是多少。”这时候我们应该怎么猜测呢?