python - 如何在结构主题建模 R 包中绘制文档主题分布?

标签 python r scikit-learn topic-modeling

如果我使用 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/

相关文章:

python - 获取与静态类型检查器一起使用的 TypedDict 值类型的函数

Python/Pandas - 删除以字符串开头的列

r - 当我运行标准偏差时获得 "NA"

python - sklearn 'preprocessor' 导入时子模块不可用

python - scikit-learn 会使用 GPU 吗?

python - SklearnClassifier 对象没有属性 _vectorizer

python - Pandas:根据某些条件过滤 groupby 数据

python - 更改 Tkinter 消息框的图标

r - ggplot2 的组合图(不在单个图中),使用 par() 或 layout() 函数?

R 字节向量到 ieee 754 float