2017-10-02 17 views
1

私は大きなスパース行列線形回帰問題を解こうとしています。次のように私は2つの行列を作成しました: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 ([email protected] %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関数は、Matrixパッケージの.solve.dgC.cholまたは.solve.dgC.qrのいずれかを使用します。詳細は?Matrix::solveをご覧ください。

代わりに正則化方法を使用するか、問題を解決するために擬似逆関数を使用する必要があります(前者を強くお勧めします)。私は間違っているかもしれませんが、どちらもMatrixModelsパッケージで利用できないようです。

+0

私は「フレア」パッケージを発見し、使用している: – Tammboy

+0

私は「フレア」パッケージを発見し、使用している: 'ライブラリ(フレア) #SQRTなげなわ アウト=スリム(A、B、方法=「LQ」、 nlambda = 40、λmin.value= sqrt(log(200)/ 120)) 'しかし、私はそれが何をしているのか分かりません。これが正しいかどうか誰にも分かりますか? 'エラー:サイズ3.2のベクトルを割り当てることができませんでした。Gb' – Tammboy

+0

' flare'パッケージは一度も使用していませんが、メモリ制限を超えたようです。 'help("メモリ制限 ")'を参照してください。あなたの問題がまばらである場合(あなたの行列の多くのゼロエントリのように)、 'glmnet'パッケージをチェックしてください。それは大きな問題を処理することができるようです - この投稿(https://stats.stackexchange.com/questions/302893/how-does-glmnet-handle-larger-datasets)。 –

関連する問題