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
minimizar ∥ X β- y∥2
A derivada é
2 XT( 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).X0 0X
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 ) βXsys2 XTs( 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 ymédia ( < x , y> ) = média ( x ) + média (y)xy
Referências:
Xiangrui Meng et al. (2016) . MLlib: aprendizado de máquina no Apache Spark