17

Rを使用してテキスト分類タスクを実行しており、サイズが22490 x 120,000のドキュメント用語マトリックスを取得しています(ゼロ以外のエントリは400万、エントリは1%未満)。ここで、PCA(主成分分析)を利用して次元を減らしたいと思います。残念ながら、Rはこの巨大な行列を処理できないため、他の手法を使用してPCAを実行することを期待して、この疎行列を「行列市場形式」のファイルに保存します。

したがって、この大規模行列を使用してPCAを簡単に実行できる、または自分で長期PCAを実行できる、つまり最初に共分散行列を計算できる、有用なライブラリ(プログラミング言語に関係なく)のヒントを誰かに教えてもらえますか?次に、共分散行列の固有値と固有ベクトルを計算します。

私が欲しいのは、すべてのPC(120,000)を計算し、90%の分散を占める上位N台のPCのみを選択することです。明らかに、この場合、いくつかの非常に小さな分散値を(共分散行列で)0に設定するために、事前にしきい値を指定する必要があります。そうしないと、共分散行列はスパースにならず、そのサイズは120,000x120,000になります。 1台のマシンで処理することは不可能です。また、負荷(固有ベクトル)は非常に大きくなるため、スパース形式で保存する必要があります。

助けてくれてありがとう!

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

4

5 に答える 5

13

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

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

編集:からのスパース行列のサポートRandomizedPCAはscikit-learn0.14で非推奨になりました。TruncatedSVD代わりに使用する必要があります。詳細については、ドキュメントを参照してください。

于 2012-05-23T13:53:10.433 に答える
7

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 アルゴリズムは、指定されたトピックの数が与えられたデータの最小記述長表現に収束します。

于 2012-06-24T21:25:34.140 に答える
1

パッケージbig.PCAのRではhttp://cran.r-project.org/web/packages/bigpca/bigpca.pdfが仕事をします。bigpca

于 2015-03-22T14:46:53.847 に答える