1

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

> 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

有谁知道解决这个问题的最佳方法?

非常感谢,

4

1 回答 1

1

您的列多于行。因此,您的矩阵不是“高”而是“宽”,并且没有满秩。该lm.fit.sparse函数使用包中的任一个.solve.dgC.chol.solve.dgC.qr来自Matrix包。你可以进一步看看?Matrix::solve

您需要使用正则化方法或方法使用伪逆来解决问题(我强烈推荐前者)。MatrixModels尽管我可能错了,但似乎两者都没有在包装中提供。

于 2017-10-02T20:35:33.880 回答