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.
xBar, yBar
genau 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/109Wenn Sie sehen möchten, wie Spark dies tut, sehen Sie sich die
org.apache.spark.mllib.linalg.distributed.RowMatrix
Klasse an und beginnen Sie mit dercomputePrincipalComponentsAndExplainedVariance
Methode .Der Teil davon, der tatsächlich verteilt ist, befindet sich in der
computeGramianMatrix
Methode , 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.
quelle