LDA主题模型运行报错:输入矩阵每行需至少含一个非零条目求助
报错根因
你仅过滤了原始描述字段为NA的样本,但后续文本预处理和特征裁剪步骤会生成无任何有效特征的全零行文档,topicmodels包的LDA函数要求输入文档Term矩阵的每一行至少存在一个非零值,因此触发报错。全零行的产生通常来自两个场景:
- 部分原始描述虽然不是NA,但内容全部由西班牙语停用词、标点、数字构成,在执行
dfm()步骤时所有内容都被移除,对应行直接变为全零 - 部分描述的所有词汇均仅在单篇文档中出现,执行
dfm_trim(min_docfreq = 2)时这些词汇会被统一裁剪删除,最终对应行变为全零
修复步骤
- 先确认全零行存在:运行下方代码统计全零行数量
sum(rowSums(cdes) == 0)
如果返回结果大于0,即可确认是该问题导致报错。
- 移除所有全零行后重新运行LDA即可:
# 过滤全零行 cdes_nonzero <- cdes[rowSums(cdes) > 0, ] # 重新拟合LDA lda <- LDA(cdes_nonzero, k = K, method = "Gibbs", control = list(verbose=25L, seed = 123, burnin = 100, iter = 500))
- 可选配套操作:如果后续需要将主题结果匹配回原始数据集,可以同步过滤原始样本,避免索引错位:
# 保留非全零行的索引 nonzero_idx <- which(rowSums(cdes) > 0) # 同步过滤原始描述子集 des_filtered <- des[nonzero_idx, ]
内容的提问来源于stack exchange,提问作者katdataecon
相关产品推荐
相关产品推荐

