LatentDirichlett分配python

LatentDirichlett分配python,python,scikit-learn,lda,Python,Scikit Learn,Lda,我通过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_

我通过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的形状时,它返回10236,我知道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仍然返回10236。我想知道为什么alpha没有改变主题中的单词。我尝试了不同的alpha值,但在lda_H中未观察到任何变化
请对此发表任何意见。Alpha是一个参数,它控制每个文档主题分布的形状,并且不影响主题的数量。主题的数量不是推断出来的,而是由无主题先验地确定的

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

alpha的更改应该反映在转换调用的返回中,您已将转换调用分配给lda_W。这将给出每个文档主题分布的矩阵。它仍然是相同的形状:n个样本,n个主题,但是您应该看到每行文档的平均概率分布的变化。例如,您可以通过设置阈值概率并检查每个文档中超过该概率的主题数,在所有文档中取平均值,比较alpha的两个值来衡量这一点

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


值得一读,以便更深入地解释算法的作用。

无主题的价值是什么?无主题=10,并且功能的数量是236。您的lda\u H将始终有236个功能,因为它们是由计数向量器发送到其中的。doc_topic_prior不会改变这一点,谢谢。从您上面的评论中,我了解到alpha将影响文档中的主题分布。现在我的问题是,在这种情况下,如果更改alpha,那么我应该在上面的代码中查看哪个变量来查看alpha的效果,或者如何观察文档中主题的分布。当然-我已经编辑了答案来显示如何检查alpha的效果。太棒了,很高兴听到!同样,我想知道您对评估LDA的想法是什么,因为现在我有了主题和文档,但我想知道除了人类分析之外,是否有任何机器学习措施来查看结果文档如何适合相关主题。