如果我使用python Sklearn进行LDA主题建模,则可以使用transform函数获取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并没有真正帮助我。
答案 0 :(得分:2)
正如emilliman5指出的那样,您的stm_model
提供了对模型基础参数的访问,如图in the documentation所示。
实际上,theta
参数是
按主题数划分的主题数矩阵中的文档数。
这需要一些语言上的解析:它是一个N_DOCS
x N_TOPICS
矩阵,即它具有N_DOCS
行,每个文档一个,以及N_TOPICS
列,每个主题一个。这些值是主题比例,即stm_model[1, ] == c(.3, .2, .5)
,表示文档1为主题30%,主题1、20%和主题3为50%。
要找出主题占主导地位的文档,您必须找到最大值的(列!)索引,该索引可通过以下方式检索:通过使用apply
调用MARGIN=1
,基本上说“逐行执行”; which.max
仅返回最大值的索引:
apply(stm_model$theta, MARGIN=1, FUN=which.max)