Verstehen, wie verteiltes PCA funktioniert


7

Im Rahmen eines Big-Data-Analyseprojekts arbeite ich an:

Ich muss PCA für einige Daten mithilfe eines Cloud-Computing-Systems durchführen.

In meinem Fall verwende ich Amazon EMR für den Job und insbesondere Spark.

Abgesehen von der Frage "Wie man PCA-in-Spark durchführt" möchte ich ein Verständnis dafür bekommen, wie die Dinge hinter den Kulissen funktionieren, wenn es darum geht, PCs in einer Cloud-basierten Architektur zu berechnen.

Zum Beispiel besteht eines der Mittel zum Bestimmen von PCs von Daten darin, die Kovarianzmatrix der Merkmale zu berechnen.

Wenn Sie beispielsweise eine HDFS-basierte Architektur verwenden, werden die Originaldaten auf mehrere Knoten verteilt. Ich vermute, dass jeder Knoten X Datensätze empfängt.

Wie wird dann die Kovarianzmatrix in einem solchen Fall berechnet, wenn jeder Knoten nur Teildaten hat?

Dies ist nur ein Beispiel. Ich versuche, Papier oder Dokumentation zu finden, die all dieses Voodoo hinter den Kulissen erklären, und konnte nichts finden, das für meine Bedürfnisse gut genug ist (wahrscheinlich meine schlechten Google-Kenntnisse).

Daher kann ich meine Frage (n) grundsätzlich wie folgt zusammenfassen:

1. Wie verteiltes PCA in der Cloud-Architektur funktioniert

Vorzugsweise eine wissenschaftliche Arbeit oder eine andere Art von Erklärung, die auch einige visuelle Elemente enthält

2. Spark-Implementierung von D-PCA

Wie macht Spark das? Haben sie eine Wendung in ihrer Architektur, um dies effizienter zu machen, oder wie trägt die Verwendung von RDD-Objekten zur Verbesserung der Effizienz bei? usw.

Eine Präsentation sogar einer Online-Lektion darüber wäre großartig.

Vielen Dank im Voraus an alle, die Lesematerial zur Verfügung stellen können.

Antworten:


4

Die Frage bezieht sich eher auf die Apache Spark-Architektur und die Kartenreduzierung. Es gibt hier mehr als eine Frage, aber das zentrale Stück Ihrer Frage ist vielleicht

Zum Beispiel besteht eines der Mittel zum Bestimmen von PCs von Daten darin, die Kovarianzmatrix der Merkmale zu berechnen.

Wenn Sie beispielsweise eine HDFS-basierte Architektur verwenden, werden die Originaldaten auf mehrere Knoten verteilt. Ich vermute, dass jeder Knoten X Datensätze empfängt.

Wie wird dann die Kovarianzmatrix in einem solchen Fall berechnet, wenn jeder Knoten nur Teildaten hat?

Ich werde darauf eingehen, was die Angelegenheit hoffentlich bis zu einem gewissen Grad klären wird.

Betrachten wir eine gängige Form der Kovarianzberechnung. 1n(x- -x¯)(y- -y¯)

Dazu müssen Sie Folgendes berechnen:

  • x¯
  • y¯
  • x- -x¯ und y- -y¯
  • Multiplizieren Sie die (x- -x¯) und (y- -y¯)

auf verteilte Weise. Der Rest ist einfach. Nehmen wir an, ich habe 100 Datenpunkte (x, y), die an 10 Apache Spark-Mitarbeiter verteilt werden und jeweils 10 Datenpunkte erhalten.

Berechnung der x¯ und y¯: Jeder Arbeiter wird hinzufügen x/.y Werte von 10 Datenpunkten und dividieren Sie diese durch 10, um den Teilmittelwert von zu erhalten x/.y(Dies ist die Kartenfunktion). Anschließend führt der Spark-Master den Aggregationsschritt (in der Spark-DAG des Jobs) aus, in dem die Teilmittel aller 10 Mitarbeiter entnommen und erneut hinzugefügt und dann durch 10 geteilt werden, um zum Finale zu gelangenx¯ oder y¯ (die Aggregat- / Reduktionsoperation)

Berechnung der (x- -x¯)(y- -y¯): Verteilen Sie auf die gleiche Weise die Datenpunkte, senden Sie die x¯ und y¯ Werte an alle Arbeiter und berechnen den Teil (x- -x¯)(y- -y¯)Führen Sie erneut die Aggregation aus, um zu erhalten (x- -x¯)(y- -y¯)

Die obige Methode wird für die verteilte Berechnung verwendet. Sie erhalten die Kovarianz. Für mehrdimensionale Daten erhalten Sie die Kovarianzmatrix.

Der Punkt besteht darin, die Berechnung für Stufen zu verteilen, die verteilt werden können, und dann die Berechnungsstufen zu zentralisieren, die nicht verteilt werden können. Dies ist in der Tat einer der wichtigsten Aspekte der Spark-Architektur.

Hoffe das hilft.


Das hilft sehr. Ich bin ein bisschen verwirrt von Ihren Definitionen. Können Sie bitte erklären, wofür das xBar, yBargenau steht? und auch die Formel, die Sie verwendet haben, ist mir unbekannt (vielleicht lese ich sie falsch). Ich bin besser mit Kovarianzberechnungen vertraut, wie hier beschrieben: onlinecourses.science.psu.edu/stat414/node/109
Adiel

@Adiel, es ist tatsächlich dasselbe, siehe Abschnitt en.wikipedia.org/wiki/Covariance 'Diskrete Variablen'. xBar und yBar sind Mittelwerte für x und y. Ich bin nicht mit dem Schreiben von Gleichungen in Posts vertraut, daher sehen die Formeln etwas seltsam aus.
Ironluca

2

Wenn Sie sehen möchten, wie Spark dies tut, sehen Sie sich die org.apache.spark.mllib.linalg.distributed.RowMatrixKlasse an und beginnen Sie mit der computePrincipalComponentsAndExplainedVarianceMethode .

Der Teil davon, der tatsächlich verteilt ist, befindet sich in der computeGramianMatrixMethode , die jeden Eingabevektor unter Verwendung einer Gramschen Matrix akkumuliertBLAS.spr(1.0, v, U.data) wobei v ein Eingabevektor ist und U den oberen dreieckigen Teil der Matrix darstellt. Dies kann auf vielen Executoren gleichzeitig ausgeführt werden, und dann können die teilweise aggregierten Matrizen kombiniert werden, indem die Matrizen zusammenaddiert werden.

Sobald alle Vektoren in der Gramian-Matrix aggregiert wurden, konvertiert sie die Matrix in eine Kovarianzmatrix und verwendet dann SVD, um die PCA-Matrix / den PCA-Vektor zu erzeugen. Diese letzte Stufe ist jedoch nicht verteilt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.