2013-04-20 73 views
13

看起來這個問題可能已經被詢問了幾次(hereand here),但它還有待回答。我希望這是由於之前提出的問題含糊不清,正如評論所表明的那樣。我很抱歉,如果我通過再次詢問一個類似問題而違反協議,我只是假設這些問題不會看到任何新的答案。爲新數據預測LDA主題

無論如何,我是Latent Dirichlet Allocation的新手,並且正在探索它作爲文本數據降維的一種手段。最終,我想從一大堆單詞中提取一小部分話題,並使用這些話題作爲模型中的一些變量建立分類模型。我已經成功地在訓練集上運行LDA,但是我遇到的問題是能夠預測哪些相同的主題出現在其他一些測試數據集中。我現在正在使用R的topicmodels包,但是如果有另一種方式使用其他包,我也可以使用。

這裏是什麼,我試圖做一個例子:

library(topicmodels) 
data(AssociatedPress) 

train <- AssociatedPress[1:100] 
test <- AssociatedPress[101:150] 

train.lda <- LDA(train,5) 
topics(train.lda) 

#how can I predict the most likely topic(s) from "train.lda" for each document in "test"? 
+5

當您在'topicmodels'包中使用'newdata'參數時會發生什麼?似乎有關.. http://cran.r-project.org/web/packages/topicmodels/topicmodels.pdf – Ben 2013-04-20 00:15:59

+2

呃,我不知道我是如何錯過在文檔中。乍一看,它看起來像:posterior(train.lda,測試)做的伎倆。 – David 2013-04-20 00:22:05

+1

@Ben你想發佈一個解決方案,所以我可以接受它嗎? – David 2013-04-20 00:25:05

回答

22

隨着本的優越文檔閱讀能力的幫助下,我相信這是可能使用後()函數。

library(topicmodels) 
data(AssociatedPress) 

train <- AssociatedPress[1:100] 
test <- AssociatedPress[101:150] 

train.lda <- LDA(train,5) 
(train.topics <- topics(train.lda)) 
# [1] 4 5 5 1 2 3 1 2 1 2 1 3 2 3 3 2 2 5 3 4 5 3 1 2 3 1 4 4 2 5 3 2 4 5 1 5 4 3 1 3 4 3 2 1 4 2 4 3 1 2 4 3 1 1 4 4 5 
# [58] 3 5 3 3 5 3 2 3 4 4 3 4 5 1 2 3 4 3 5 5 3 1 2 5 5 3 1 4 2 3 1 3 2 5 4 5 5 1 1 1 4 4 3 

test.topics <- posterior(train.lda,test) 
(test.topics <- apply(test.topics$topics, 1, which.max)) 
# [1] 3 5 5 5 2 4 5 4 2 2 3 1 3 3 2 4 3 1 5 3 5 3 1 2 2 3 4 1 2 2 4 4 3 3 5 5 5 2 2 5 2 3 2 3 3 5 5 1 2 2 
+2

不錯的工作! 'test.topics [[2]]'是主題爲cols,新文檔爲行和單元格值爲後驗概率的矩陣。 – Ben 2013-04-21 08:06:07

+0

必須更改直線列車< - AssociatedPress [1:100]和測試< - AssociatedPress [101:150]以訓練< - AssociatedPress [1:100,]和測試< - AssociatedPress [101:150,] =) – hdvianna 2018-01-20 13:03:43

+0

python有沒有類似的東西? – 2018-02-24 12:46:38