LatentDirichletAllocation python

LatentDirichletAllocation python

我正在通过 python 库的 scikit 为 LatentDirichletAllocation 使用以下代码:

tf_vectorizer = CountVectorizer(max_df=0.95, min_df=2, stop_words='english')
tf = tf_vectorizer.fit_transform(documents)

lda_model = LatentDirichletAllocation(n_components=10, max_iter=5, 
learning_method='online', learning_offset=50.,random_state=0).fit(tf)
lda_W = lda_model.transform(tf)
lda_H = lda_model.components_

当我打印 lda_H 的形状 returns (10, 236) 时,我理解 10 是主题编号,236 是单词。我希望看到 alpha 对此的影响,所以我将上面的代码更改为:

lda_model = LatentDirichletAllocation(n_components=10,doc_topic_prior=.01, max_iter=5, 
learning_method='online', learning_offset=50.,random_state=0).fit(tf)
lda_W = lda_model.transform(tf)
lda_H = lda_model.components_

但是我发现 alpha 对主题中的单词没有影响,lda_H 仍然 returns (10, 236)。我想知道为什么 alpha 不更改主题中的单词。我尝试了不同的 alpha 值,但在 lda_H 中没有观察到任何变化 请对它提出任何意见。

Alpha 是一个参数,它控制每个文档主题分布的形状,并且不影响主题的数量。主题的数量不是推断的,而是no_topics先验固定的。

每个文档始终是所有主题的混合分布,alpha 控制每个文档所有主题的概率分布。我们可以根据我们是否先验地期望每个文档在所有主题上相对均匀地混合,或者我们是否期望大多数概率分配给每个文档的较小主题集来设置它。

alpha 的更改应反映在 transform 调用的 return 中,您已将其分配给 lda_W。这给出了每个文档主题分布的矩阵。它仍然是相同的形状:(n_samples, n_topics),但您应该看到每行(文档)的平均概率分布发生变化。例如,您可以通过设置阈值概率并检查每个文档中超过此概率的主题数量来衡量这一点,对所有文档进行平均,比较两个 alpha 值。

主题分布也被推断为所有词的混合分布,因此词的数量不会改变,而是每个主题分配给每个词的概率。

值得阅读 original paper on LDA 以更深入地解释算法的作用。