Fonte:
A regresión lineal é un dos algoritmos básicos para moitas áreas relacionadas coa análise de datos. A razón disto é obvia. Este é un algoritmo moi sinxelo e comprensible, que contribuíu ao seu uso xeneralizado durante moitas decenas, se non centos, de anos. A idea é que asumimos unha dependencia lineal dunha variable sobre un conxunto doutras variables e despois tentamos restaurar esta dependencia.
Pero este artigo non trata de usar a regresión lineal para resolver problemas prácticos. Aquí consideraremos características interesantes da implementación de algoritmos distribuídos para a súa recuperación, que atopamos ao escribir un módulo de aprendizaxe automática en
De que estamos a falar?
Estamos ante a tarefa de restaurar a dependencia lineal. Como datos de entrada, dáse un conxunto de vectores de variables supostamente independentes, cada un dos cales está asociado a un determinado valor da variable dependente. Estes datos pódense representar en forma de dúas matrices:
Agora, dado que a dependencia é asumida, e, ademais, lineal, escribiremos a nosa suposición en forma de produto de matrices (para simplificar o rexistro, aquí e abaixo asúmese que o termo libre da ecuación está agochado detrás , e a última columna da matriz contén unidades):
Soa moito a un sistema de ecuacións lineais, non? Parece, pero o máis probable é que non haxa solucións para tal sistema de ecuacións. A razón disto é o ruído, que está presente en case todos os datos reais. Outra razón pode ser a falta de dependencia lineal como tal, que se pode combater introducindo variables adicionais que non dependen linealmente das orixinais. Considere o seguinte exemplo:
Fonte:
Este é un exemplo sinxelo de regresión lineal que mostra a relación dunha variable (ao longo do eixe ) doutra variable (ao longo do eixe ). Para que o sistema de ecuacións lineais correspondente a este exemplo teña solución, todos os puntos deben estar exactamente na mesma recta. Pero iso non é certo. Pero non se atopan na mesma liña recta precisamente polo ruído (ou porque a suposición dunha relación lineal era errónea). Así, para restaurar unha relación lineal a partir de datos reais, adoita ser necesario introducir unha suposición máis: os datos de entrada conteñen ruído e este ruído ten ruído.
Método de máxima verosimilitud
Entón, asumimos a presenza de ruído aleatorio distribuído normalmente. Que facer ante tal situación? Para este caso en matemáticas hai e é moi utilizado
Volvemos a restaurar unha relación lineal a partir de datos con ruído normal. Nótese que a relación lineal asumida é a expectativa matemática distribución normal existente. Ao mesmo tempo, a probabilidade de que adquire un valor ou outro, suxeito á presenza de observables , como segue:
Imos agora substituír no seu lugar и As variables que necesitamos son:
Só queda atopar o vector , no que esta probabilidade é máxima. Para maximizar tal función, é conveniente tomar primeiro un logaritmo dela (o logaritmo da función alcanzará un máximo no mesmo punto que a propia función):
O que, á súa vez, reduce ao mínimo a seguinte función:
Por certo, isto chámase método
Descomposición QR
O mínimo da función anterior pódese atopar atopando o punto no que o gradiente desta función é cero. E o gradiente escribirase do seguinte xeito:
Entón descompoñemos a matriz ás matrices и e realizar unha serie de transformacións (non se considerará aquí o propio algoritmo de descomposición de QR, só o seu uso en relación coa tarefa a realizar):
Matriz é ortogonal. Isto permítenos desfacernos do traballo :
E se o substitúe en , entón vai funcionar . Tendo en conta iso é unha matriz triangular superior, ten o seguinte aspecto:
Isto pódese resolver mediante o método de substitución. Elemento está situado como , elemento anterior está situado como e así por diante.
Paga a pena sinalar aquí que a complexidade do algoritmo resultante debido ao uso da descomposición QR é igual a . Ademais, a pesar de que a operación de multiplicación da matriz está ben paralelizada, non é posible escribir unha versión distribuída efectiva deste algoritmo.
Descenso Gradiente
Cando se fala de minimizar unha función, sempre convén lembrar o método de descenso do gradiente (estocástico). Este é un método de minimización sinxelo e eficaz baseado en calcular de forma iterativa o gradiente dunha función nun punto e despois desprazalo na dirección oposta ao gradiente. Cada paso deste tipo achega a solución ao mínimo. O gradiente segue sendo o mesmo:
Este método tamén está ben paralelizado e distribuído debido ás propiedades lineais do operador de gradiente. Teña en conta que na fórmula anterior, baixo o signo de suma hai termos independentes. Noutras palabras, podemos calcular o gradiente de forma independente para todos os índices dende o primeiro ata , paralelamente a isto, calcula o gradiente para índices con para . A continuación, engade os gradientes resultantes. O resultado da suma será o mesmo que se calculasemos inmediatamente o gradiente dos índices do primeiro ao . Así, se os datos se distribúen entre varios datos, o gradiente pódese calcular de forma independente en cada peza, e despois pódense sumar os resultados destes cálculos para obter o resultado final:
Dende o punto de vista da implementación, isto encaixa co paradigma
A pesar da facilidade de implementación e da capacidade de execución no paradigma MapReduce, a baixada de gradientes tamén ten os seus inconvenientes. En particular, o número de pasos necesarios para lograr a converxencia é significativamente maior en comparación con outros métodos máis especializados.
LSQR
O método LSQR baséase en
Pero se asumimos que a matriz está dividido horizontalmente, entón cada iteración pode representarse como dous pasos de MapReduce. Deste xeito, é posible minimizar as transferencias de datos durante cada iteración (só vectores cunha lonxitude igual ao número de incógnitas):
Este enfoque é o que se usa cando se implementa a regresión lineal
Conclusión
Hai moitos algoritmos de recuperación de regresión lineal, pero non todos poden aplicarse en todas as condicións. Polo tanto, a descomposición QR é excelente para unha solución precisa en conxuntos de datos pequenos. O descenso en gradiente é sinxelo de implementar e permítelle atopar rapidamente unha solución aproximada. E LSQR combina as mellores propiedades dos dous algoritmos anteriores, xa que se pode distribuír, converxe máis rápido en comparación co descenso de gradientes e tamén permite a detención temperá do algoritmo, a diferenza da descomposición QR, para atopar unha solución aproximada.
Fonte: www.habr.com