2015-11-18 2 views
1

Я пытаюсь использовать LDA() из пакета topicmodels на довольно большом наборе данных. Попробовав все, чтобы исправить следующие ошибки: «В nr * nc: NA, создаваемые целым переполнением» и «Каждая строка входной матрицы должна содержать хотя бы одну ненулевую запись», я попал в эту ошибку.ДокументTermMatrix должен иметь весовую частоту весов Ошибка

ask<- read.csv('askreddit201508.csv', stringsAsFactors = F)  
myDtm <- create_matrix(as.vector(ask$title), language="english", removeNumbers=TRUE, stemWords=TRUE, weighting=weightTf) 
myDtm2 = removeSparseTerms(myDtm,0.99999) 
myDtm2 <- rollup(myDtm2, 2, na.rm=TRUE, FUN = sum) 
rowTotals <- apply(myDtm2 , 1, sum) 
myDtm2 <- myDtm2[rowTotals> 0, ] 
LDA2 <- LDA(myDtm2,100) 

Error in LDA(myDtm2, 100) : 
    The DocumentTermMatrix needs to have a term frequency weighting 

ответ

3

Часть проблемы заключается в том, что вы взвешивание документа термин матрицы Tf-IDF, но LDA требует термин подсчета. Кроме того, этот метод удаления разреженных терминов, по-видимому, создает некоторые документы, в которых все условия были удалены.

Легче получить от вашего текста к теме модели, используя quanteda package. Вот так:

require(quanteda) 
myCorpus <- corpus(textfile("http://homepage.stat.uiowa.edu/~thanhtran/askreddit201508.csv", 
          textField = "title")) 
myDfm <- dfm(myCorpus, stem = TRUE) 
## Creating a dfm from a corpus ... 
## ... lowercasing 
## ... tokenizing 
## ... indexing documents: 160,707 documents 
## ... indexing features: 39,505 feature types 
## ... stemming features (English), trimmed 12563 feature variants 
## ... created a 160707 x 26942 sparse dfm 
## ... complete. 

# remove infrequent terms: see http://stats.stackexchange.com/questions/160539/is-this-interpretation-of-sparsity-accurate/160599#160599 
sparsityThreshold <- round(ndoc(myDfm) * (1 - 0.99999)) 
myDfm2 <- trim(myDfm, minDoc = sparsityThreshold) 
## Features occurring in fewer than 1.60707 documents: 12579 
nfeature(myDfm2) 
## [1] 14363 

# fit the LDA model 
require(topicmodels) 
LDA2 <- LDA(quantedaformat2dtm(myDfm2), 100) 
+1

Я думал, что положил weighting = weightTf, чтобы сделать его временной частотой вместо tf-idf. Я думал, что rollup() не работает. Но если я удалю накопительный пакет, я бы получил другую ошибку. Но кванда определенно отлично работает для меня. Благодарю . – user1569341

Смежные вопросы