Как изменить значения матрицы DocumentTermMatrix? - PullRequest
0 голосов
/ 08 сентября 2018

Repex:

Предположим, у меня есть DTM:

library(topicmodels)
data(AssociatedPress)

Я пытаюсь присвоить значение .001 всем тем значениям, которые 0

Вариант использования:

Я получаю эту ошибку при запуске LDA на моей матрице

Ошибка в LDA (notSparse, k, method = "Gibbs", control = list (nstart = nstart,: каждая строка входной матрицы должна содержать как минимум одна ненулевая запись

Я хотел бы посмотреть, что произойдет, если я превращу нули в маленькие значения, чтобы уменьшить разреженность вместо использования выделенной функции.

1 Ответ

0 голосов
/ 08 сентября 2018

Изменение значений матрицы от 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. Этого не должно произойти, если вы не удалили некоторые термины из своей матрицы документов, что привело к появлению строки, в которой нет значения 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

Но если вы настроены на замену разреженных записей в матрице документа, вам сначала нужно преобразовать ее в матрицу, а затем заменить 0.

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