主成分分析(PCA)の古典的な方法は、列の平均がゼロである入力データマトリックスで行う(PCAが「分散を最大化できる」)方法です。これは、列を中央に配置することで簡単に実現できます。ただし、入力マトリックスがスパースの場合、中央に配置されたマトリックスはスパースになり、マトリックスが非常に大きい場合、メモリに収まりません。ストレージの問題に対するアルゴリズム的な解決策はありますか?
主成分分析(PCA)の古典的な方法は、列の平均がゼロである入力データマトリックスで行う(PCAが「分散を最大化できる」)方法です。これは、列を中央に配置することで簡単に実現できます。ただし、入力マトリックスがスパースの場合、中央に配置されたマトリックスはスパースになり、マトリックスが非常に大きい場合、メモリに収まりません。ストレージの問題に対するアルゴリズム的な解決策はありますか?
回答:
データマトリックスが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年の大規模なレビュー:ランダムネスを使用した構造の検出:近似行列分解を構築するための確率的アルゴリズム。