R Решение больших разреженных неквадратных матриц
Я пытаюсь решить проблему разреженной матрицы с большой линейной регрессией. Я создал две матрицы следующим образом:
> 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 ответ
У вас больше столбцов, чем строк. Таким образом, у вас матрица не "высокая", а "широкая" и не имеет полного ранга. lm.fit.sparse
функция использует либо .solve.dgC.chol
или же .solve.dgC.qr
от Matrix
пакет. Вы можете взглянуть на ?Matrix::solve
,
Вам нужно использовать метод регуляризации или метод псевдообращения для решения проблемы (я настоятельно рекомендую первый). Кажется, ни один не доступен в MatrixModels
пакет, хотя я могу ошибаться.