2

我使用 R 包 topicmodels 运行 LDA,我一直在尝试获取 delta 的值,在我的理解中,这是关于主题的单词的 dirichlet 参数。但是,我无法访问该值。我只设法使用

LDA@control@delta

或者

slot(LDA@control,"delta")

我知道如何获得后验分布的 alpha(主题的 Dir 参数),这很简单,slot(LDA,"alpha")但如何获得 delta?

非常感谢!

4

1 回答 1

0

topicmodels对采样方法使用控制参数列表,此处为 Gibbs 采样。alpha = 50/k和的默认值delta = 0.1被假定为control_LDA_Gibbs- 当然,您可以指定其他值。也许您没有正确指定控件。无论如何,这里有一个简短的代码示例,应该在输出中提供有关 deltaprior 的信息。我希望这有助于并解决您的问题。

library(text2vec)
library(topicmodels)
library(slam) #to convert dtm to simple triplet matrix for topicmodels

ntopics <- 10
alphaprior <- 0.1
deltaprior <- 0.001
niter <- 1000

seedpar <- 0 

docssubset <- 1:500

docs <- movie_review$review[docssubset]

#Generate document term matrix with text2vec    
tokens = docs %>% 
  tolower %>% 
  word_tokenizer

it = itoken(tokens, ids = movie_review$id[docssubset], progressbar = FALSE)

vocab = create_vocabulary(it) %>%
  prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.2)

vectorizer = vocab_vectorizer(vocab)

dtm = create_dtm(it, vectorizer, type = "dgTMatrix")

control_Gibbs_topicmodels <- list(
                            alpha = alphaprior
                            ,delta = deltaprior 
                            ,iter = niter
                            ,burnin = 100                           
                            ,keep = 50
                            ,nstart = 1
                            ,best = TRUE
                            ,seed = seedpar

)


ldatopicmodels <- LDA(as.simple_triplet_matrix(dtm)
                      ,k = ntopics
                      ,method = "Gibbs"
                      ,control = control_Gibbs_topicmodels 
                      )

str(ldatopicmodels)

ldatopicmodels@control@delta
于 2017-10-30T13:40:23.403 回答