Como parte do projeto de análise de big data, estou trabalhando,
Preciso executar o PCA em alguns dados, usando o sistema de computação em nuvem.
No meu caso, estou usando o Amazon EMR para o trabalho e o Spark em particular.
Deixando de lado a questão "Como executar o PCA na faísca", quero entender como as coisas funcionam nos bastidores quando se trata de calcular PCs na arquitetura baseada em nuvem.
Por exemplo, um dos meios para determinar PCs de um dado é calcular a matriz de covariância dos recursos.
Ao usar a arquitetura baseada em HDFS, por exemplo, os dados originais são distribuídos por vários nós, acho que cada nó recebe registros X.
Como, então, é calculada a matriz de covariância nesse caso, quando cada nó tem apenas dados parciais?
Este é apenas um exemplo. Estou tentando encontrar algum documento ou documentação explicando todo esse vodu nos bastidores e não consegui encontrar nada bom o suficiente para minhas necessidades (provavelmente minhas poucas habilidades no Google).
Então, basicamente, posso resumir minhas perguntas \ precisa ser o seguinte:
1. Como o PCA distribuído na arquitetura em nuvem funciona
De preferência algum trabalho acadêmico ou outro tipo de explicação que também contenha alguns recursos visuais
2. Implementação Spark do D-PCA
Como o Spark faz isso? Eles têm alguma 'torção' em sua arquitetura para fazê-lo com mais eficiência, ou como o uso de objetos RDD contribui para melhorar a eficiência? etc.
Uma apresentação de até uma lição on-line seria ótima.
Agradecemos antecipadamente a quem puder fornecer algum material de leitura.
xBar, yBar
significa exatamente? e também a fórmula que você usou não me é familiar (talvez eu esteja lendo errado). Estou mais familiarizado com cálculos de covariância, como descrito aqui: onlinecourses.science.psu.edu/stat414/node/109Se você quiser ver como faísca faz isso, olhar para a
org.apache.spark.mllib.linalg.distributed.RowMatrix
classe, começando com ocomputePrincipalComponentsAndExplainedVariance
método .A parte dela que é realmente distribuído é no
computeGramianMatrix
método , que acumula cada vector de entrada numa matriz Gramian usandoBLAS.spr(1.0, v, U.data)
onde v é um vector de entrada, e L representa a parte triangular superior da matriz. Isso pode ser executado simultaneamente em muitos executores e, em seguida, as matrizes parcialmente agregadas podem ser combinadas adicionando as matrizes.Uma vez que todos os vetores foram agregados na matriz Gramian, ele converte a matriz em uma matriz de covariância e, em seguida, usa SVD para produzir a matriz / vetor PCA. No entanto, esta etapa final não é distribuída.
fonte