大規模なPCAも可能ですか?


10

主成分分析(PCA)の古典的な方法は、列の平均がゼロである入力データマトリックスで行う(PCAが「分散を最大化できる」)方法です。これは、列を中央に配置することで簡単に実現できます。ただし、入力マトリックスがスパースの場合、中央に配置されたマトリックスはスパースになり、マトリックスが非常に大きい場合、メモリに収まりません。ストレージの問題に対するアルゴリズム的な解決策はありますか?


5
完全なデータ行列がメモリに収まらない場合でも、共分散またはグラム行列のいずれかがメモリに収まる可能性があります。これらは、PCAを実行するのに十分です。考えている入力データマトリックスのサイズは?stats.stackexchange.com/questions/35185も参照してください。
アメーバはモニカ

1
@amoeba:500Kのサンプル(行)と300Kの機能(列)を調べています
Roy

ソフトウェアについては、Apache Sparkにはspark.apache.org/docs/latest/…実装がメモリ不足データを確実に処理するように
Tim

回答:


11

はい、可能です。

データマトリックスがRAMに収まらない場合、それはまだ世界の終わりではありません。ハードドライブに保存されたデータを処理できる効率的なアルゴリズムがあります。たとえば、Halko et al。、2010、An algorithm for the principal component analysis of large data setsに記載されているランダムPCAを参照してください。

セクション6.2で、著者は、アルゴリズムを40万倍の10万データマトリックスで試したこと、および

本論文のアルゴリズムは、1.5 GBのRAMを搭載したラップトップコンピュータを使用して、ディスクに保存されたこの150 GBのデータセットすべてを処理するのに12.3時間を必要としました[...]。

これは、磁気ハードドライブの昔のことです。今日、はるかに高速なソリッドステートドライブが利用可能であるため、同じアルゴリズムでかなり高速に実行できると思います。

ランダム化されたPCAの詳細については、この古いスレッドも参照してください:膨大な数の機能(> 10K)に最適なPCAアルゴリズム?そして、Halkoらによるこの2011年の大規模なレビュー:ランダムネスを使用した構造の検出:近似行列分解を構築するための確率的アルゴリズム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.