R求解大型稀疏非方矩阵

时间:2017-10-02 20:03:52

标签: r sparse-matrix linear-regression matrix-inverse flare

我正在尝试解决一个大的稀疏矩阵线性回归问题。我创建了两个矩阵如下:

> 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 (cld@className %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 个答案:

答案 0 :(得分:1)

列数多于行数。因此,你的矩阵不是“高”而是“宽”并且没有完整的等级。 lm.fit.sparse函数使用.solve.dgC.chol包中的.solve.dgC.qrMatrix。您可以进一步了解?Matrix::solve

你需要使用正则化方法或者使用伪逆来解决问题(我强烈推荐前者)。虽然我可能错了,但似乎MatrixModels包中都没有。