如果我使用 python Sklearn 进行 LDA 主题建模,我可以使用转换函数来获取 LDA 结果的“文档主题分布”,如下所示:
document_topic_distribution = lda_model.transform(document_term_matrix)
现在我也尝试了 R 结构主题模型 (stm) 包,我想要得到相同的结果。 stm包中是否有任何函数可以产生相同的东西(文档主题分发)? 我创建了 stm 对象,如下所示:
stm_model <- stm(documents = out$documents, vocab = out$vocab,
K = number_of_topics, data = out$meta,
max.em.its = 75, init.type = "Spectral" )
但我没有找到如何从这个对象中获得所需的分布。 documentation也没有真正帮助我。
最佳答案
正如 emilliman5 指出的,您的 stm_model
提供对模型底层参数的访问,如图 in the documentation 所示。 。
事实上,theta
参数是一个
Number of Documents by Number of Topics matrix of topic proportions.
这需要一些语言解析:它是一个 N_DOCS
by N_TOPICS
矩阵,即它有 N_DOCS
行,每个文档一个,并且 N_TOPICS
列,每个主题一列。这些值是主题比例,即如果 stm_model[1, ] == c(.3, .2, .5)
,则意味着文档 1 为主题 1 的 30%,主题 2 为 20%, 50% 主题 3。
要找出哪个主题在文档中占主导地位,您必须找到最大值的(列!)索引,可以检索该索引,例如通过使用 MARGIN=1
调用 apply
,这基本上表示“按行执行此操作”; which.max
只是返回最大值的索引:
apply(stm_model$theta, MARGIN=1, FUN=which.max)
关于python - 如何在结构主题建模 R 包中绘制文档主题分布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948857/