r 中 LDA 中的错误:输入矩阵的每一行至少需要包含一个非零条目



我是文本挖掘主题的入门者。当我在具有996165观测值的大型数据集上运行LDA()时,它显示以下错误:

LDA(dtm, k, method = "Gibbs", control = list(nstart = nstart, :输入矩阵的每一行至少需要包含一个非零条目。

我很确定我的语料库中没有缺失的值。"DocumentTermMatrix"和"simple_triplet_matrix"的表是:

table(is.na(dtm[[1]]))
#FALSE 
#57100956 
table(is.na(dtm[[2]]))
#FALSE 
#57100956 

有点困惑"57100956"是如何来的。但是由于我的数据集非常大,我不知道如何检查为什么会发生此错误。我的 LDA 命令是:

ldaOut<-LDA(dtm,k, method="Gibbs", control=list(nstart=nstart, seed = seed, best=best, burnin = burnin, iter = iter, thin=thin))

任何人都可以提供一些见解吗?谢谢。

在我看来,问题不在于缺少值的存在,而在于存在所有 0 行。要检查它:

raw.sum=apply(table,1,FUN=sum) #sum by raw each raw of the table

然后,您可以删除所有都是0的原始数据:

table=table[raw.sum!=0,]

现在表应该包含所有"非 0"原始数据。

我遇到了同样的问题。在您的情况下,设计矩阵 dtm 的行全为零,因为圆顶文档不包含某些单词(即它们的频率为零)。我想这以某种方式导致了沿线某处的奇异矩阵问题。我通过为每个文档添加一个常用词来解决此问题,以便每行至少有一个非零条目。至少,LDA成功运行并分类了每个文件。希望这有帮助!

另一个简单的解决方案是,创建一个rowSums列表(表示每个文档的术语数),并使用该列表按具有非零条目的行过滤df。

rowWords <- apply(df, 1, sum)
df <- df[rowWords > 0,]

最新更新