毛进
Scaled sampling
2014-12-27 23:39
阅读:4157

最近看Gibbs sampling的LDA源代码,发现有如下一段:

   

// cumulate multinomial parameters

for (int k = 1; k < trnModel.K; k++){

trnModel.p[k] += trnModel.p[k - 1];

}


// scaled sample because of unnormalized p[]

double u = Math.random() * trnModel.p[trnModel.K - 1];

for (topic = 0; topic < trnModel.K; topic++){

if (trnModel.p[topic] > u) //sample topic w.r.t distribution p

break;

}


初看不明白是什么意思。后来仔细体会了一下scaled sample,大致想想可能意思是根据元素的值,来做随机选择(主题)。一般情况下,随机选择是一个完全随机的,例如从1-10中随机选择一个数,那么,其中每一个数被选中的概率是均等的。假设有这样一种随机抽样,1-10中每个数字被选中的概率比这个数字的值成正比,那么应当怎么选择呢? 这个过程即可使用scaled sample计算。

   可以简单操作如下:

   (1)加总所有的值;

   (2)在总值内做均等随机(Java中的Math.random()),取出一个值;

   (3)查找这个值在原始序列中的位置,即取出原始值。


转载本文请联系原作者获取授权,同时请注明本文来自毛进科学网博客。

链接地址:https://m.sciencenet.cn/blog-563898-854390.html?mobile=1

收藏

分享到:

当前推荐数:0
推荐到博客首页
网友评论1 条评论
确定删除指定的回复吗?
确定删除本博文吗?