分散PCAの仕組みを理解する


7

ビッグデータ分析プロジェクトの一環として、

クラウドコンピューティングシステムを使用して、一部のデータに対してPCAを実行する必要があります。

私の場合、私は仕事、特にSparkにAmazon EMRを使用しています。

「How to-Perform-PCA-in-Spark」の質問はさておき、クラウドベースのアーキテクチャでPCを計算する場合、舞台裏で物事がどのように機能するかを理解したいと思います。

たとえば、データのPCを決定する手段の1つは、特徴の共分散行列を計算することです。

たとえば、HDFSベースのアーキテクチャを使用している場合、元のデータは複数のノードに分散されており、各ノードがXレコードを受信して​​いると思います。

次に、各ノードに部分的なデータしかない場合、共分散行列はどのように計算されますか?

これは単なる例です。私は、このすべての舞台裏のブードゥー教を説明する紙やドキュメントを探していますが、自分のニーズ(おそらく、Googleのスキルが低い)に対して十分なものを見つけることができませんでした。

だから私は基本的に私の質問を要約することができます\は以下でなければなりません:

1.クラウドアーキテクチャ上の分散型PCAの仕組み

できれば、いくつかの学術論文またはその他の種類の説明も含みます。

2. D-PCAのSpark実装

Sparkはそれをどのように行うのですか?彼らはそれをより効率的にするために彼らのアーキテクチャに「ひねり」を持っていますか、またはRDDオブジェクトの使用はどのように効率の改善に貢献していますか?等

それに関するオンラインレッスンのプレゼンテーションも素晴らしいでしょう。

いくつかの読書資料を提供できる人には、事前に感謝します。

回答:


4

質問は、Apache Sparkアーキテクチャとマップリデュースに関連しています。ここには複数の質問がありますが、あなたの質問の中心はおそらく

たとえば、データのPCを決定する手段の1つは、特徴の共分散行列を計算することです。

たとえば、HDFSベースのアーキテクチャを使用している場合、元のデータは複数のノードに分散されており、各ノードがXレコードを受信して​​いると思います。

次に、各ノードに部分的なデータしかない場合、共分散行列はどのように計算されますか?

私はそれを取り上げますが、うまくいけば問題はある程度クリアになるでしょう。

共分散計算の一般的な形式を見てみましょう。 1Σバツバツ¯yy¯

これには、以下を計算する必要があります。

  • バツ¯
  • y¯
  • バツバツ¯ そして yy¯
  • 掛ける バツバツ¯ そして yy¯

分散して。残りは単純です。10個のApache Sparkワーカーに配布される100個のデータポイント(x、y)があり、それぞれが10個のデータポイントを取得するとします。

の計算 バツ¯ そして y¯:各ワーカーが追加します バツ/y 10個のデータポイントの値とこれを10で割って、 バツ/y(これはマップ関数です)。次に、Sparkマスターは集約ステップを実行し(ジョブのSpark DAGで)、10人のワーカーすべてからの部分平均が取得されて再び追加され、10で除算されて最終に到達しますバツ¯ または y¯ (集約/削減操作)

の計算 バツバツ¯yy¯:同様に、データポイントを配布し、 バツ¯ そして y¯ すべてのワーカーへの値と部分的な計算 バツバツ¯yy¯、もう一度集計を実行して Σバツバツ¯yy¯

上記の方法は分散計算に使用され、共分散を取得する必要があります。多次元データの場合は、共分散行列を取得できます。

ポイントは、配信可能なステージの計算を分散し、配信できない計算ステージを集中化することです。これは事実上、Sparkアーキテクチャの重要な側面の1つです。

お役に立てれば。


これは大きな助けになります。私はあなたの定義に少し戸惑っていますxBar, yBarが、正確には何の略ですか?また、あなたが使用した式は私には不慣れです(多分私はそれを間違って読んでいます)。ここで説明するように、私は、共分散の計算をよりよく知っている:onlinecourses.science.psu.edu/stat414/node/109
Adiel

@Adiel、それは実際には同じです、参照してください:en.wikipedia.org/wiki/Covariance「Discreet Variables」セクション。xBarとyBarはxとyの平均です。私は投稿に方程式を書くことに慣れていないので、式は少し変に見えます。
Ironluca 2017

2

Sparkがどのように実行するかを確認したい場合org.apache.spark.mllib.linalg.distributed.RowMatrixcomputePrincipalComponentsAndExplainedVarianceメソッドから始まるクラスを見てください。

実際に配布され、その一部はである方法で使用してグラム行列に、各入力ベクトルを蓄積し、vは入力ベクトルであり、Uは、行列の上三角部分を表します。これは、多くのエグゼキューターで同時に実行でき、部分的に集約されたマトリックスは、マトリックスを追加することによって組み合わせることができます。computeGramianMatrixBLAS.spr(1.0, v, U.data)

すべてのベクトルがグラミアン行列に集約されると、行列が共分散行列に変換され、SVDを使用してPCA行列/ベクトルが生成されます。ただし、この最終段階は配布されません。

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