加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

累积法-Gibbis采样中的一个疑点

发布时间:2020-12-14 04:48:02 所属栏目:大数据 来源:网络整理
导读:大家好,我是Pancho,今天记录一下我在LDA中遇到的一个算法,仅仅是理解,可能也有错误。 1. 上帝玩一个掷骰子:骰子有K个面,每个面投到的概率不一致,每一个面上面有对应的一个数字。请聪明的人类来帮助上帝设计一个算法,随机投掷骰子,然后得到骰子某个面

大家好,我是Pancho,今天记录一下我在LDA中遇到的一个算法,仅仅是理解,可能也有错误。

1.上帝玩一个掷骰子:骰子有K个面,每个面投到的概率不一致,每一个面上面有对应的一个数字。请聪明的人类来帮助上帝设计一个算法,随机投掷骰子,然后得到骰子某个面上的数字。

2.好,我作为人类的代表,呲溜地窜到了上帝面前,咳咳,?(?‘ω‘?)? 说道:“亲爱的上帝,我来帮助你完成这个任务。”然后,上帝微微点头,表示允诺。

这个算法,主要的是怎么随机投掷到面,然后获取面的数字。

3.算法如下

?

步骤1:初始化数组p[]

骰子的每个面的概率就是 array[ ]里面每个index都有对应的概率值array[i],我们把每个面对应的数字就看成是index=0,1,2,3...,也就是看作列表元素的下标。

步骤2:这里先拷贝array到数组p.

步骤3:然后逐项累加,从第2想开始,每一个都是前面2个面的概率和,最后一位是所有的概率和,这里总概率和可以不为1。

比如:p[1/3,1/5,2/15,1/15],则经过第四步骤后,p变为p[1/3,8/15,10/15,11/15].

步骤4:设置u,u=随机数[0,1]*p[last index],u就是一个0-1的随机数乘以所有概率的和,上一步已经存到了最后一位数组中了。

步骤5:比较累积和与u的大小,若某项index的累积和大于u,则表示该index的累积概率足够大于随机概率。弹出index即可。完成。

这个算法一次只玩一个号。要达到所有面都弹出来,外面还要加循环。

4.参考

《LDA漫游指南》P56

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读