我正在为 Naive Bayes 实现创建一个文档术语矩阵(简称 dtm)(我知道有一个函数,但我必须自己编写代码以完成作业。)我编写了一个成功创建 dtm 的函数,问题是结果矩阵占用了太多内存。例如,一个 100 x 32000 矩阵(由 0 和 1 组成)的大小为 24MB!当尝试使用完整的 10k 文档时,这会导致 r 中的崩溃行为。下面是函数,最后 3 行是一个玩具示例。谁能发现为什么特别是“稀疏”函数会返回如此大量内存的结果?
listAllWords <- function(docs)
{
str1 <- strsplit(x=docs, split="\\s", fixed=FALSE)
dictDupl <- unlist(str1)[!(unlist(str1) %in% stopWords)]
dictionary <- unique(dictDupl)
}
#function to create the sparse matrix of words as they appear in each article segment
sparser <- function (docs, dictionary)
{
num.docs <- length(docs) #dtm rows
num.words <- length(dictionary) #dtm columns
dtm <- mat.or.vec(num.docs,num.words) # Instantiate dtm of zeroes
for (i in 1:num.docs)
{
doc.temp <- unlist(strsplit(x=docs[i], split="\\s", fixed=FALSE)) #vectorize words
num.words.doc <- length(doc.temp)
for (j in 1:num.words.doc)
{
ind <- which(dictionary == doc.temp[j]) #loop over words and find index in dict.
dtm[i,ind] <- 1 #indicate this word is in this document
}
}
return(dtm)
}
docs <- c("the first document contains words", "the second document is also made of words", "the third document is words and a number 4")
dictionary <- listAllWords(docs)
dtm <- sparser(docs,dictionary)
如果有什么不同,我将在 Mac OSX 的 R Studio 中运行它,64 位