如何更改DocumentTermMatrix矩阵的值?

时间:2018-09-08 05:40:01

标签: r tm topic-modeling

Repex:

假设我有dtm:

library(topicmodels)
data(AssociatedPress)

我正在尝试为所有.001的那些值分配0的值

用例:

在矩阵上运行LDA时出现此错误

  

LDA中的错误(notSparse,k,方法=“ Gibbs”,控制=列表(nstart =   nstart ,:输入矩阵的每一行都必须至少包含   一个非零条目

我想看看如果将零变为较小的值以减少稀疏性而不使用专用功能会发生什么情况。

1 个答案:

答案 0 :(得分:1)

将矩阵值从0更改为0.001不适用于topicmodels::LDA。 代码中有一项检查,希望所有值都是整数值。这意味着不允许使用0.001的值。请参见下面的示例:

m_replaced_zero <- matrix(c(1, 1, 0.001, 0), nrow = 2)
LDA(m_replaced_zero)
Error in !all.equal(x$v, as.integer(x$v)) : invalid argument type

奇怪的是,您得到的错误意味着您的矩阵中仅包含0的行。除非您从documenttermmatrix中删除了一些导致不存在1或更大值的行的术语,否则这不会发生。参见下面的示例。

m_zero_row <- matrix(c(1, 0, 1, 0), nrow = 2)
     [,1] [,2]
[1,]    1    1
[2,]    0    0
LDA(m_zero_row)
Error in LDA(m_zero_row) : 
  Each row of the input matrix needs to contain at least one non-zero entry

但是,如果您打算替换documenttermmatrix中的稀疏条目,则首先需要将其转换为矩阵,然后替换0。

data("AssociatedPress")
m <- as.matrix(AssociatedPress)
m[m==0] <- 0.001