2017-10-02 8 views
1

J'essaie de résoudre un grand problème de régression linéaire à matrice clairsemée. J'ai créé deux matrices comme suit:R Résoudre de grandes matrices creuses non-carrées

> dim(A) 
[1] 26573 32991 

> dim(B) 
[1] 26573  1 

Si j'utilise matrixmodels lm.fit.sparse, je reçois l'erreur suivante:

> 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 

Qu'est-ce que nécessite une matrice haute signifie? Si je change B pour que ce soit une matrice creuse:

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

et essayer de résoudre à nouveau, je reçois une autre erreur:

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

Est-ce que quelqu'un sait la meilleure façon de s'y prendre pour résoudre ce problème?

Un grand merci,

Répondre

1

Vous avez plus de colonnes que les lignes. Ainsi, vous matrice pas "grand" mais "large" et n'a pas le rang complet. La fonction lm.fit.sparse utilise .solve.dgC.chol ou .solve.dgC.qr du package Matrix. Vous pouvez jeter un coup d'œil à ?Matrix::solve.

Vous devez utiliser une méthode de régularisation à la place ou une méthode pseudo-inverse pour résoudre le problème (je recommande fortement le premier). Il semble que ni l'un ni l'autre n'est disponible dans le paquet MatrixModels bien que je puisse me tromper.

+0

J'ai trouvé le paquet 'flare' et utilisé: – Tammboy

+0

J'ai trouvé le paquet 'flare' et utilisé: 'bibliothèque (flare) # RACINE Lasso out = mince (A, B, method = "lq", nlambda = 40, lambda.min.value = sqrt (log (200)/120)) 'mais je n'ai aucune idée de ce qu'il fait? Est-ce que quelqu'un sait si c'est correct? Il a retourné une erreur: 'Erreur: impossible d'allouer un vecteur de taille 3.2 Gb' – Tammboy

+0

Je n'ai jamais utilisé le paquet' flare' mais il semble que vous ayez atteint une limite de mémoire. Voir 'help (" Memory-limits ")'. Si votre problème est faible (comme dans de nombreuses entrées nulles de votre matrice), vérifiez le paquet 'glmnet'. Il semble qu'il peut gérer de gros problèmes - se [cet article] (https://stats.stackexchange.com/questions/302893/how-does-glmnet-handle-larger-datasets). –