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
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
fonte