2015-04-06 1 views
0

Я пытаюсь создать разреженную матрицу с числовыми и категориальными данными, которые будут использоваться в качестве входа в cv.glmnet. Когда только числовые данные участвуют, я могу создать разреженную матрицу, используя следующий синтаксисsparseMatrix с числовыми и категориальными данными

sparseMatrix(i=c(1,3,5,2), j=c(1,1,1,2), x=c(1,2,4,3), dims=c(5,2)) 

Для категориальных переменных следующего подхода, кажется, работает:

sparse.model.matrix(~-1+automobile, data.frame(automobile=c("sedan","suv","minivan","truck","sedan"))) 

Мой очень редкий экземпляр имеет 1,000,000 наблюдение и 10000 переменные. У меня недостаточно памяти для создания полной матрицы. Единственный способ, с помощью которого я могу создать sparseMatrix, - вручную обрабатывать категориальные переменные, создавая столбцы и преобразуя данные в (i, j, x) формат. Я надеюсь, что кто-то может предложить лучший подход.

+0

Как насчет предоставления выборки данных? – desertnaut

ответ

1

Это может или не может работать, но вы можете попробовать создавая модельные матрицы для каждой переменной отдельно, а затем cBind объединяя их.

do.call(cBind, 
     sapply(names(df), function(x) sparse.model.matrix(~., df[x])[, -1, drop=FALSE])) 

Обратите внимание, что вы, вероятно, хотите создать столбец перехватывать, а затем удалить его, а не указывать -1 в формуле, как вы сделали выше. Последний удалит один уровень для вашего первого фактора, но сохранит все уровни для остальных, поэтому он зависит от упорядочения переменных.

2

разреженные матрицы имеют ту же мощность, плотные матрицы для назначения позиции, используя два -column матрицы в качестве одного аргумента «[»:

require(Matrix) 
M <- Matrix(0, 10, 10) 
dfrm <- data.frame(rows=sample(1:10,5), cols=sample(1:10,5), vals=rnorm(5)) 
dfrm 
#--------- 
    rows cols  vals 
1 3 9 -0.1419332 
2 4 3 1.4806194 
3 6 7 -0.5653500 
4 5 1 -1.0127539 
5 1 2 -0.5047298 
#-------- 

M[ with(dfrm, cbind(rows,cols)) ] <- dfrm$vals 
M 
#--------------- 

M 
10 x 10 sparse Matrix of class "dgCMatrix" 

[1,] .  -0.5047298 .  . . . .  . .   . 
[2,] .   .   .  . . . .  . .   . 
[3,] .   .   .  . . . .  . -0.1419332 . 
[4,] .   .   1.480619 . . . .  . .   . 
[5,] -1.012754 .   .  . . . .  . .   . 
[6,] .   .   .  . . . -0.56535 . .   . 
[7,] .   .   .  . . . .  . .   . 
[8,] .   .   .  . . . .  . .   . 
[9,] .   .   .  . . . .  . .   . 
[10,] .   .   .  . . . .  . .   . 

 Смежные вопросы

  • Нет связанных вопросов^_^