2017-10-02 19 views
1

큰 희소 행렬 선형 회귀 문제를 풀려고합니다. 다음과 같이 저는 두 행렬을 만들었습니다R 거대한 비선형 행렬 문제 해결

> dim(A) 
[1] 26573 32991 

> dim(B) 
[1] 26573  1 

내가 matrixmodels, 나는 다음과 같은 오류 얻을 lm.fit.sparse 사용하는 경우 :

> X=MatrixModels:::lm.fit.sparse(A,B) 
Error in .solve.dgC.qr(if ([email protected] %in% c("dtCMatrix", "dgCMatrix")) x else as(x, : dgCMatrix_qrsol(<26573 x 32991>-matrix) requires a 'tall' rectangular matrix 

무엇을 키가 큰 행렬을 의미하는 필요를? 나는 그것이 희소 행렬의 있도록 B를 변경하는 경우 :

[1] "dgCMatrix" 
attr(,"package") 
[1] "Matrix" 

다시 해결하려고, 난 다른 오류가 발생합니다 :

> X=MatrixModels:::lm.fit.sparse(A,B) 
Error: is.numeric(y) is not TRUE 

사람이 문제를 해결 갈 수있는 가장 좋은 방법을 알고 있나요?

많은 감사,

답변

1

행보다 많은 열이 있습니다. 따라서, "높이"가 아니라 "넓음"에 매트릭스를 만들고 전체 순위를 갖지 않습니다. lm.fit.sparse 함수는 Matrix 패키지의 .solve.dgC.chol 또는 .solve.dgC.qr을 사용합니다. ?Matrix::solve을 자세히 살펴볼 수 있습니다.

대신 정규화 방법을 사용하거나 의사 역변환을 사용하여 문제를 해결해야합니다 (전자를 권장합니다). 내가 잘못했을 수도 있지만 어느 쪽도 MatrixModels 패키지에서 사용할 수없는 것 같습니다.

+0

은 내가 '플레어'패키지를 발견하고 사용했습니다 : – Tammboy

+0

나는 '플레어'패키지를 발견하고 사용했습니다 :'라이브러리 (플레어) # SQRT 올가미 아웃 = 슬림 (A, B, 방법 = "LQ" nlambda = 40, λmin.value = sqrt (log (200)/120)) '그러나 나는 그것이 무엇을하고 있는지 전혀 모른다? 이것이 정확한지 아는 사람이 있습니까? 'Error : 크기 3.2의 벡터를 할당 할 수 없습니다. Gb' – Tammboy

+0

'flare' 패키지는 사용한 적이 없지만 메모리 제한을 초과 한 것처럼 보입니다. 'help ("메모리 제한")'을보십시오. 문제가 희박한 경우 (매트릭스의 많은 0 항목 에서처럼) 'glmnet' 패키지를 확인하십시오. 큰 문제를 처리 할 수있는 것 같습니다. [이 게시물] (https://stats.stackexchange.com/questions/302893/how-does-glmnet-handle-larger-datasets). –