Como executar a regressão linear de maneira paralela / distribuída para a configuração de big data?


13

Estou trabalhando em um problema de regressão linear muito grande, com tamanho de dados tão grande que eles precisam ser armazenados em um cluster de máquinas. Será muito grande para agregar todas as amostras na memória de uma única máquina (mesmo disco)

Para fazer a regressão desses dados, estou pensando em uma abordagem paralela, ou seja, execute a regressão em cada caixa individual e depois calcule o beta com base nas estatísticas de cada beta individual (provavelmente uma média ou mediana)

Isto faz algum sentido ? em caso afirmativo, como eu deveria obter o total esperado R2 de cada indivíduo ?R2

Respostas:


10

Resposta curta:

Sim, foi executada a regressão linear em paralelo. Por exemplo, Xiangrui Meng et al. (2016) para Machine Learning no Apache Spark. A maneira como funciona é usar a descida estocástica do gradiente (SGD). Na seção 3, principais recursos, o autor mencionou:

Modelos lineares generalizados são aprendidos através de algoritmos de otimização que paralelizam a computação em gradiente, usando bibliotecas rápidas de álgebra linear baseadas em C ++ para cálculos de trabalhadores.

Um exemplo de como o SGD funciona pode ser encontrado na minha resposta aqui: Como a descida estocástica do gradiente economizaria tempo em comparação com a descida padrão do gradiente?


Resposta longa:

Observe que a notação não é consistente com o link que forneci; sinto que a notação matricial é melhor nesta questão.

Para fazer uma regressão linear, estamos tentando fazer

minimize Xβy2

A derivada é

2XT(Xβy)

Em pequenas configurações de dados, podemos definir a derivada como e resolvê-la diretamente. (por exemplo, decomposição QR em R.) Nas configurações de big data, a matriz de dados é muito grande para ser armazenada na memória e pode ser difícil de resolver diretamente. (Não estou familiarizado com a decomposição de QR ou de Cholesky para matrizes enormes).X0X

Uma maneira de paralelizar isso é tentar usar um método iterativo: descida estocástica do gradiente, onde podemos aproximar o gradiente usando um subconjunto dos dados. (Se usarmos , para representar um subconjunto dos dados, o gradiente poderá ser aproximado por e poderemos atualizar com o gradiente aproximado).y s 2 X T s ( X s β - y s ) βXsys2XsT(Xsβys)β

Além disso, para a estatística , podemos calcular para todos os dados em paralelo ou aproximar esses dados usando um subconjunto dos dados.R 2R2R2

Intuição sobre como funciona (paradigma de mapreduce):

Eu continuo dizendo aproximação usando um subconjunto; a intuição do motivo pelo qual isso funciona pode ser descrita no exemplo a seguir: suponha que eu tenha 100 bilhões de pontos de dados e desejemos calcular a média de todos os pontos de dados. Suponha que a realização de uma operação desse tipo demore muito e, além disso, todos os dados não possam ser armazenados na memória.

O que podemos fazer é pegar um subconjunto, digamos 1 bilhão de itens, e calcular a média deles. A aproximação assim produzida não deve estar muito longe da verdade (ou seja, usando todos os dados).

Para paralelizar, podemos usar 100 computadores, cada um deles pegando um subconjunto diferente dos 1 bilhão de pontos de dados e calculando a média deles. (Geralmente chamado de etapa MAP). Por fim, execute outra média nesses 100 números (também conhecida como etapa REDUCE).

Observe que o "paradigma de mapreduce" funcionaria bem em alguns casos, mas não em outros. Por exemplo, a operação "média" mencionada anteriormente é muito fácil, porque sabemos , ( assumindo que o comprimento de e são o mesmo). Para alguns métodos iterativos, ou seja, a iteração atual depende dos resultados da iteração anterior, é difícil paralelizar. A descida do gradiente estocástico resolve esse problema aproximando o gradiente usando um subconjunto de dados. E detalhes podem ser encontrados na resposta de @ user20160.x ymean(<x,y>)=mean(x)+mean(y)xy

Referências:

Xiangrui Meng et al. (2016) . MLlib: aprendizado de máquina no Apache Spark


8

Como o @ hxd1011 mencionou, uma abordagem é formular a regressão linear como um problema de otimização e resolvê-la usando um algoritmo iterativo (por exemplo, descida do gradiente estocástico). Essa abordagem pode ser paralela, mas há algumas questões importantes: 1) Como o problema deve ser dividido em subproblemas? 2) Dado que algoritmos de otimização como o SGD são inerentemente seqüenciais, como as soluções para os subproblemas devem ser combinadas para obter uma solução global?

Zinkevich et al. (2010) descrevem algumas abordagens anteriores para paralelizar várias máquinas:

  • 1) Paralelize o SGD da seguinte maneira: Divida os dados em várias máquinas. Em cada etapa, cada máquina local estima o gradiente usando um subconjunto dos dados. Todas as estimativas de gradiente são passadas para uma máquina central, que as agrega para executar uma atualização global de parâmetros. A desvantagem dessa abordagem é que ela requer comunicação de rede pesada, o que reduz a eficiência.

  • 2) Particione os dados uniformemente nas máquinas locais. Cada máquina resolve o problema exatamente para seu próprio subconjunto de dados, usando um solucionador em lote. As estimativas finais dos parâmetros das máquinas locais são calculadas em média para produzir uma solução global. O benefício dessa abordagem é que ela requer muito pouca comunicação de rede, mas a desvantagem é que as estimativas de parâmetros podem ser abaixo do ideal.

Eles propõem uma nova abordagem:

  • 3) Permita que cada máquina local desenhe aleatoriamente pontos de dados. Execute o SGD em cada máquina. Por fim, calcule a média dos parâmetros entre as máquinas para obter uma solução global. Como (2), esse método requer pouca comunicação de rede. Porém, as estimativas dos parâmetros são melhores porque cada máquina pode acessar uma fração maior dos dados.

A abordagem de otimização paralela é muito geral e se aplica a muitos algoritmos de aprendizado de máquina (não apenas à regressão linear).

Outra alternativa seria usar algoritmos de decomposição de matriz paralela / distribuída ou solucionadores lineares. A regressão linear de mínimos quadrados possui uma estrutura especial que permite que seja resolvida usando métodos de decomposição de matrizes. É assim que você normalmente o solucionaria no caso de um conjunto de dados menor que caiba na memória. Isso pode ser paralelizado distribuindo blocos da matriz em várias máquinas e resolvendo o problema usando cálculos de matriz paralela / distribuída. Como essa abordagem é mais especializada na solução de sistemas lineares, seria interessante ver como seu desempenho se compara à abordagem de otimização distribuída mais geral. Se alguém puder fornecer mais informações sobre isso, ficarei feliz em ouvir.

Referências:

Zinkevich et al. (2010) . Descida de gradiente estocástico paralelo.


+1 ótima resposta para resolver o problema que não discuti em detalhes, ou seja, depois de ter gradiente aproximado o que fazer.
Haitao Du

@ hxd1011 +1 para você, bem como para boa descrição do SGD e como conectá-lo ao do OP problema
user20160

2

Muito, muito tempo, antes da redução do mapa, resolvi isso. Abaixo está a referência a um artigo antigo meu no Journal of Econometrics 1980. Era para máxima verossimilhança não-linear paralela e funcionaria para a estimativa-M.

O método é exato para regressões. Divida os dados em k subconjuntos em k processadores / unidades (também pode ser feito sequencialmente.) As regressões k mantêm os coeficientes de regressão na matriz X'X de cada um. Chame estes b1, ..., bk e W1, ..., Wk respectivamente, então os coeficientes de regressão geral são dados por b = inverso (W1 + .. + Wk) * (W1 * b1 + ... + Wk * bk) um precisa de outra passagem pelos dados para calcular os resíduos usando b para os parâmetros obterem sigma ^ 2 a variação de erro estimada, R ^ 2 geral F e similares. Então a matriz de covariância de b é dada exatamente por sigma ^ 2 (inverso (W1 + .. + Wk)). Acima * indica multiplicação da matriz.

https://www.sciencedirect.com/science/article/pii/0304407680900950


Gostaria de conhecer o seu trabalho quando fiz o meu! academic.oup.com/imaiai/article-abstract/5/4/379/…
JohnRos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.