2017-10-02 15 views
1

Ich versuche ein großes lineares Regressionsproblem mit einer dünnen Matrix zu lösen. Ich habe zwei Matrizen wie folgt erstellt:R Lösen von großen dünnen nicht-quadratischen Matrizen

> dim(A) 
[1] 26573 32991 

> dim(B) 
[1] 26573  1 

Wenn ich matrixmodels verwenden lm.fit.sparse, ich die folgende Fehlermeldung erhalten:

> 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 

Was bedeutet erfordert eine große Matrix bedeuten? Wenn i B ändern, so dass es eine spärliche Matrix ist:

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

und versuchen Sie es erneut zu lösen, erhalte ich einen anderen Fehler:

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

Kennt jemand die beste Weg, um dieses Problem zu lösen gehen?

Vielen Dank,

Antwort

1

Sie haben mehr Spalten als Zeilen. Sie matrixieren also nicht "groß", sondern "breit" und haben keinen vollen Rang. Die lm.fit.sparse Funktion verwendet entweder .solve.dgC.chol oder .solve.dgC.qr aus dem Matrix Paket. Sie können einen weiteren Blick auf ?Matrix::solve werfen.

Sie müssen stattdessen eine Regularisierungsmethode verwenden oder verwenden Sie die Methode pseudo inverse, um das Problem zu lösen (ich würde die erstere sehr empfehlen). Es scheint weder verfügbar in der MatrixModels Paket, obwohl ich falsch liegen kann.

+0

Ich habe die 'flare' Paket und verwendet gefunden: – Tammboy

+0

Ich habe die 'flare' Paket gefunden und verwendet: 'Bibliothek (Flare) # SQRT Lasso out = slim (A, B, method = "lq", nlambda = 40, lambda.min.value = sqrt (log (200)/120)) 'aber ich habe keine Ahnung, was es macht? Weiß jemand, ob das stimmt? Es gab einen Fehler zurück: 'Fehler: Ich kann keinen Vektor der Größe 3.2 Gb zuweisen ' – Tammboy

+0

Ich habe noch nie das' flare'-Paket benutzt, aber es scheint so, als ob Sie ein Speicherlimit erreichen. Siehe 'help (" Speicherlimits ")'. Wenn Ihr Problem spärlich ist (wie bei vielen Null-Einträgen Ihrer Matrix), dann überprüfen Sie das Paket 'glmnet'. Es scheint, dass es große Probleme behandeln kann - se [diesen Beitrag] (https://stats.stackexchange.com/questions/302893/how-does-glmnet-handle-larger-datasets). –

Verwandte Themen