|
最近看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)查找这个值在原始序列中的位置,即取出原始值。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-27 19:46
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社