私は巨大な疎行列にPCAを適用しようとしていますが、sklearnのランダム化されたPCAはscipyの疎フォーマットの疎行列を扱うことができます。 Apply PCA on very large sparse matrixsklearnを使用して大スパース行列でPCAを実行する
ただし、私はいつもエラーが発生します。誰かが私が間違っていることを指摘できますか?
入力行列「X_trainは」のfloat64に数字が含まれています
>>>type(X_train)
<class 'scipy.sparse.csr.csr_matrix'>
>>>X_train.shape
(2365436, 1617899)
>>>X_train.ndim
2
>>>X_train[0]
<1x1617899 sparse matrix of type '<type 'numpy.float64'>'
with 81 stored elements in Compressed Sparse Row format>
私がやろうとしています:
>>>from sklearn.decomposition import RandomizedPCA
>>>pca = RandomizedPCA()
>>>pca.fit(X_train)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/sklearn/decomposition/pca.py", line 567, in fit
self._fit(check_array(X))
File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/sklearn/utils/validation.py", line 334, in check_array
copy, force_all_finite)
File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/sklearn/utils/validation.py", line 239, in _ensure_sparse_format
raise TypeError('A sparse matrix was passed, but dense '
TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.
私は密行列に変換しようとした場合、私はメモリ不足だと思います。
>>> pca.fit(X_train.toarray())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/scipy/sparse/compressed.py", line 949, in toarray
return self.tocoo(copy=False).toarray(order=order, out=out)
File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/scipy/sparse/coo.py", line 274, in toarray
B = self._process_toarray_args(order, out)
File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/scipy/sparse/base.py", line 800, in _process_toarray_args
return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError
リンクした質問にこの回答がありますか? http://stackoverflow.com/a/10721425/2272172 – cel
はい、私は、巨大な疎な行列にPCAを適用する方法があるかどうかを知りたいと思います(できるだけPythonとSklearnを使用して) – khassan
あなたはすでに 'TruncatedSVD'を使用していますそれは動作しませんでしたか?もしそうなら、それもあなたの質問に書いてください。 – cel