У меня есть матрица факторов в R и вы хотите преобразовать ее в матрицу фиктивных переменных 0-1 для всех возможных уровней каждого фактора.
Однако эта матрица "dummy" очень велика (91690x16593) и очень разрежена. Мне нужно сохранить его в разреженной матрице, иначе он не поместится в моем 12 ГБ оперативной памяти.
В настоящее время я использую следующий код, и он работает очень хорошо и занимает секунды:
library(Matrix)
X_factors <- data.frame(lapply(my_matrix, as.factor))
#encode factor data in a sparse matrix
X <- sparse.model.matrix(~.-1, data = X_factors)
Однако я хочу использовать пакет e1071 в R и в конечном итоге сохранить эту матрицу в формате libsvm с помощью write.matrix.csr()
, поэтому сначала мне нужно преобразовать мою разреженную матрицу в формат SparseM.
Я попытался сделать:
library(SparseM)
X2 <- as.matrix.csr(X)
но он очень быстро заполняет мою оперативную память, и в конечном итоге R сбой. Я подозреваю, что внутри as.matrix.csr
сначала преобразует разреженную матрицу в плотную матрицу, которая не соответствует моей памяти компьютера.
Моим другим вариантом было бы создать мою разреженную матрицу непосредственно в формате SparseM.
Я пробовал as.matrix.csr(X_factors)
, но он не принимает кадр данных факторов.
Есть ли эквивалент sparse.model.matrix(~.-1, data = X_factors)
в пакете SparseM? Я искал в документации, но не нашел.