首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: LDA主题模型--这些术语的分布在哪里?

R: LDA主题模型--这些术语的分布在哪里?
EN

Stack Overflow用户
提问于 2015-07-18 08:55:59
回答 2查看 1.5K关注 0票数 2

主题是TermDocumentMatrix的术语(=words)上的多项式分布。使用以k=5作为主题数量的标准数据集.

代码语言:javascript
复制
library(topicmodels)
data("AssociatedPress", package = "topicmodels")

k <- 5 
lda <- LDA(AssociatedPress[1:20,], control = list(alpha = 0.1), k)

str(lda)提供以下输出

代码语言:javascript
复制
Formal class 'LDA_VEM' [package "topicmodels"] with 14 slots
..@ alpha          : num 0.0184
..@ call           : language LDA(x = AssociatedPress[1:20, ], k = k, control = list(alpha = 0.1))
..@ Dim            : int [1:2] 20 10473
..@ control        :Formal class 'LDA_VEMcontrol' [package "topicmodels"] with 13 slots
.. .. ..@ estimate.alpha: logi TRUE
.. .. ..@ alpha         : num 0.1
.. .. ..@ seed          : int 1437208609
.. .. ..@ verbose       : int 0
.. .. ..@ prefix        : chr
.. .. ..@ save          : int 0
.. .. ..@ nstart        : int 1
.. .. ..@ best          : logi TRUE
.. .. ..@ keep          : int 0
.. .. ..@ estimate.beta : logi TRUE
.. .. ..@ var           :Formal class 'OPTcontrol' [package "topicmodels"] with 2 slots
.. .. .. .. ..@ iter.max: int 500
.. .. .. .. ..@ tol     : num 1e-06
.. .. ..@ em            :Formal class 'OPTcontrol' [package "topicmodels"] with 2 slots
.. .. .. .. ..@ iter.max: int 1000
.. .. .. .. ..@ tol     : num 1e-04
.. .. ..@ initialize    : chr "random"
..@ k              : int 5
..@ terms          : chr [1:10473] "aaron" "abandon" "abandoned" "abandoning" ...
..@ documents      : NULL
..@ beta           : num [1:5, 1:10473] -100 -100 -100 -100 -100 -100 -100 -100 -100 -100 ...
..@ gamma          : num [1:20, 1:5] 7.00e-05 6.79e-05 7.22e-05 8.89e-05 2.79e-04 ...
..@ wordassignments:List of 5
.. ..$ i   : int [1:2533] 1 1 1 1 1 1 1 1 1 1 ...
.. ..$ j   : int [1:2533] 116 153 218 272 299 302 447 455 548 597 ...
.. ..$ v   : num [1:2533] 5 5 5 5 5 5 5 5 5 5 ...
.. ..$ nrow: int 20
.. ..$ ncol: int 10473
.. ..- attr(*, "class")= chr "simple_triplet_matrix"
..@ loglikelihood  : num [1:20] -1512 -1584 -1400 -1324 -418 ...
..@ iter           : int 12
..@ logLiks        : num(0) 
..@ n              : int 3636

lda中似乎没有存储我需要的数据的对象。我知道gamma给出了主题在文档上的分布,但是我如何访问这些术语的主题分布呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-18 10:06:13

您可以使用posterior(lda)$terms查看主题在术语上的后验分布。

代码语言:javascript
复制
library(topicmodels)
data("AssociatedPress", package = "topicmodels")
lda <- LDA(AssociatedPress[1:20,], control = list(alpha = 0.1), k = 2)

terms <- as.data.frame(t(posterior(lda)$terms))
head(terms)

                      1            2
aaron      3.720076e-44 3.720076e-44
abandon    3.720076e-44 3.720076e-44
abandoned  3.720076e-44 3.720076e-44
abandoning 3.720076e-44 3.720076e-44
abbott     3.720076e-44 3.720076e-44
abboud     3.720076e-44 3.720076e-44
票数 4
EN

Stack Overflow用户

发布于 2015-07-18 09:56:17

看起来,在fit对象中称为beta的槽中,β作为k*n矩阵返回。因此,您可以使用以下方法检查调用lda()中的一个:

代码语言:javascript
复制
lda@beta

这些术语也以lda@terms的形式存在,因此您可以使用它们创建一个数据框架来查找特定的数据框架:

代码语言:javascript
复制
betas <- data.frame(t(lda@beta))
betas$term <- lda@terms
names(betas) <- c(paste("topic", seq(k), sep="."), "term")
head(betas)

当我运行它时,我看到的是:

代码语言:javascript
复制
  topic.1 topic.2 topic.3 topic.4 topic.5       term
1    -100    -100    -100    -100    -100      aaron
2    -100    -100    -100    -100    -100    abandon
3    -100    -100    -100    -100    -100  abandoned
4    -100    -100    -100    -100    -100 abandoning
5    -100    -100    -100    -100    -100     abbott
6    -100    -100    -100    -100    -100     abboud

如果你扫描更多的表格,你会看到哪些条件得到了-100以外的东西作为他们的贝塔。例如:

代码语言:javascript
复制
> betas[19,]
     topic.1   topic.2   topic.3   topic.4   topic.5 term
19 -181.7717 -176.7156 -6.919684 -196.3646 -6.398595 able
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31489489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档