我正在尝试解决一个大的稀疏矩阵线性回归问题。我创建了两个矩阵如下:
> 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
有谁知道解决这个问题的最佳方法?
非常感谢,
答案 0 :(得分:1)
列数多于行数。因此,你的矩阵不是“高”而是“宽”并且没有完整的等级。 lm.fit.sparse
函数使用.solve.dgC.chol
包中的.solve.dgC.qr
或Matrix
。您可以进一步了解?Matrix::solve
。
你需要使用正则化方法或者使用伪逆来解决问题(我强烈推荐前者)。虽然我可能错了,但似乎MatrixModels
包中都没有。