2012-05-23 7 views
13

私はRでテキスト分類タスクを実行しており、サイズ22490×120,000(1%のエントリが400万で、エントリが1%未満)のドキュメント用語行列を取得します。 PCA(Principal Component Analysis)を利用して次元を小さくしたいと考えています。残念ながら、Rはこの巨大な行列を扱うことができないので、私はこの疎な行列を「行列市場形式」のファイルに保存し、PCAを行うためにいくつかの他の手法を使いたいと考えています。非常に大きな疎行列にPCAを適用する

ので、誰でも簡単に、この大規模な行列にPCAを行う可能性がある、私に便利なライブラリ(どんなプログラミング言語)のためのいくつかのヒントを与える、または他の言葉で、自分で手書きPCAを行うことができ、を計算しますまず共分散行列の固有値と固有ベクトルを計算します。。私が欲しいもの

には、すべてのPC(120,000)を計算し、90%の分散を占めているだけで、トップN PCを、選択しています。明らかに、この場合、私はいくつかの非常に小さな分散値を0(共分散行列内)に設定するために先験的に閾値を与えなければならない。そうでなければ、共分散行列は疎ではなく、そのサイズは120,000×120,000になる。 1台のマシンで処理することは不可能です。また、ローディング(固有ベクトル)は非常に大きく、スパース形式で保存する必要があります。

ありがとうございました!

注:24GBのRAMと8つのCPUコアを搭載したマシンを使用しています。

+0

私はそれが100%正しいのか分かりませんが、私はMatLabがその仕事をすることができると思います。 – Anton

+0

ここに喜んでおられない方は、http://stats.stackexchange.com/ – NPE

+0

@aixにお尋ねください。あなたのアドバイスをありがとう、私はそれを計算科学ベータに移して、ヒント。あなたはこの[URL](http://scicomp.stackexchange.com/questions/2313/apply-pca-on-very-large-sparse-matrix)でそれをフォローすることもできます –

答えて

11

Pythonツールキットscikit-learnには、scipy.sparseでサポートされている形式のいずれかでスパース行列を処理できるPCAのバリエーションがいくつかあります(そのうちのRandomizedPCA)。 scipy.io.mmreadは、Matrix Marketフォーマットを解析できるはずです(私はそれを試したことはありません)。

免責事項:私はscikit-learn開発チームにいます。

EDITRandomizedPCAのスパース行列サポートは、scikit-learn 0.14では推奨されていません。代わりにTruncatedSVDを使用する必要があります。詳細については、ドキュメントを参照してください。

+0

@ larmansをありがとう、ある程度、あなたの提案された方法は、疎な行列でPCAを行うことができますが、それは大きなメモリの消費量のため、PCのいくつかの小額を計算することができます: ( –

+0

'RandomizedPCA'はキーワード引数' svd_solver = 'randomized''を使って 'PCA'のために廃止されました。 – BallpointBen

6

PCAを実行する代わりに、潜在的なディリクレ割り当て(LDA)を試すと、文書語マトリックスを文書トピックとトピック語マトリックスに分解します。ここにRの実装へのリンクがあります:http://cran.r-project.org/web/packages/lda/ - そこにはいくつかの実装がありますが、もしあなたがグーグルなら。

LDAを使用する場合は、事前に(主成分と同様に)一定数のトピックを指定する必要があります。潜在的により良い選択肢は、あなたのコーパスをうまく表現するトピックの数を学習するHDP-LDA(http://www.gatsby.ucl.ac.uk/~ywteh/research/npbayes/npbayes-r21.tgz)です。

私たちのデータセットをメモリに収めることができれば、あなたはLDAコードを実行する際に問題を起こすべきではありません。

scicompフォーラムの多くの人が指摘しているように、120kのすべての主要コンポーネントを計算する必要はありません。 http://en.wikipedia.org/wiki/Power_iterationのようなアルゴリズムは行列の最大固有値を計算し、LDAアルゴリズムは指定されたトピックの数を考慮してデータの最小記述長表現に収束します。

関連する問題