随机分配主题
# 随机给词汇分配一个主题
# 单词i属于第k个主题的个数加1,所以
# 文章m属于主题k的词汇的个数也加1,因为词汇i来自文章m
# 因此每个主题下词汇个数也加1
代码实现:
for x in range(len(self.Z)): self.ndsum[x] = self.dpre.docs[x].length for y in range(self.dpre.docs[x].length): topic = random.randint(0,self.K-1)#初始时随机给文本中的每个单词分配主题 self.Z[x][y] = topic self.nw[self.dpre.docs[x].words[y]][topic] += 1 self.nd[x][topic] += 1 self.nwsum[topic] += 1
# z= [list([0, 1, 1, 2, 0]) list([2, 0, 2, 1]) list([2, 1, 2, 0]) list([2, 2, 2, 0]) list([2, 2, 1, 2]) list([0, 1, 2, 0])]#每个词汇的主题号
topic = self.Z[i][j]
word = self.dpre.docs[i].words[j]
1,
self.nw[word][topic] -= 1#排除当前第i个词,词汇在各个主题上的分布
# nw=词word在主题上的分布 此时主题为3
#[[1 0 1]
# [1 2 0]
# [0 1 1]
# [0 0 1]
# [1 0 0]
# [1 1 1]
# [2 0 1]
# [0 0 1]
# [0 1 2]
# [0 0 1]
# [0 1 1]
# [0 0 1]
# [1 0 1]]
2,
self.nd[i][topic] -= 1#排除当前第i个词,每个文章中各个主题下词的总数
# nd= 每个文章中各个主题下词的总数
# [[2 2 1]
# [1 1 2]
# [1 1 2]
# [1 0 3]
# [0 1 3]
# [2 1 1]]
3,
self.nwsum[topic] -= 1#排除当前第i个词,每个主题下词的总数
# nwsum= [ 7 6 12] 各个topic下词的总数
4,
self.ndsum[i] -= 1#排除当前第i个词,每篇文章中词的总数
# ndsum= [5 4 4 4 4 4] 每篇文章中词的总数