Regresión lineal en línea eficiente


53

Estoy analizando algunos datos en los que me gustaría realizar una regresión lineal ordinaria, sin embargo, esto no es posible ya que estoy tratando con una configuración en línea con un flujo continuo de datos de entrada (que rápidamente será demasiado grande para la memoria) y necesito para actualizar las estimaciones de los parámetros mientras se consume. es decir, no puedo cargarlo todo en la memoria y realizar una regresión lineal en todo el conjunto de datos.

Asumo un modelo de regresión lineal multivariado simple, es decir

y=UNAX+si+mi

¿Cuál es el mejor algoritmo para crear una estimación de actualización continua de los parámetros de regresión lineal y ?bUNAsi

Idealmente:

  • Me gustaría un algoritmo que sea la mayor parte de la complejidad de espacio y tiempo por actualización, donde es la dimensionalidad de la variable independiente ( ) y es la dimensionalidad de la variable dependiente ( ).N x M yO(norteMETRO)norteXMETROy
  • Me gustaría poder especificar algún parámetro para determinar cuánto se actualizan los parámetros por cada nueva muestra, por ejemplo, 0.000001 significaría que la siguiente muestra proporcionaría una millonésima parte de la estimación del parámetro. Esto daría algún tipo de disminución exponencial para el efecto de las muestras en el pasado distante.

2
Busque (1) Regresión lineal flexible, (2) Filtros de Kalman.
Jase

Respuestas:


31

Maindonald describe un método secuencial basado en rotaciones de Givens . (Una rotación de Givens es una transformación ortogonal de dos vectores que pone a cero una entrada dada en uno de los vectores). En el paso anterior, ha descompuesto la matriz de diseño en una matriz triangular T a través de una transformación ortogonal Q para que Q X = ( T , 0 ) . (Es rápido y fácil obtener los resultados de la regresión de una matriz triangular). Al unirse a una nueva fila v debajo de X , efectivamente extiende ( T , 0 )XTQQX=(T,0 0)vX Por una fila distinta de cero, también, digamos t . La tarea es poner a cero esta fila mientras se mantienen las entradas en la posición de T diagonal. Una secuencia de rotaciones de Givens hace esto: la rotación con la primera fila de T ceros es el primer elemento de t ; luego la rotación con la segunda fila de T pone a cero el segundo elemento, y así sucesivamente. El efecto es premultiplicar Q mediante una serie de rotaciones, lo que no cambia su ortogonalidad.(T,0 0)tTTtTQ

Cuando la matriz de diseño tiene columnas (que es el caso cuando retrocede en p variables más una constante), el número de rotaciones necesarias no excede p + 1 y cada rotación cambia dos vectores p + 1 . El almacenamiento necesario para T es O ( ( p + 1 ) 2 ) . Por lo tanto, este algoritmo tiene un costo computacional de O ( ( p + 1 ) 2 ) tanto en tiempo como en espacio.pags+1pagspags+1pags+1TO((pags+1)2)O((pags+1)2)

Un enfoque similar le permite determinar el efecto en la regresión de eliminar una fila. Maindonald da fórmulas; también lo hacen Belsley, Kuh y Welsh . Por lo tanto, si está buscando una ventana móvil para la regresión, puede retener los datos de la ventana dentro de un búfer circular, junto al nuevo dato y soltando el anterior con cada actualización. Esto duplica el tiempo de actualización y requiere almacenamiento adicional de para una ventana de ancho k . Parece que 1 / k sería el análogo del parámetro de influencia.O(k(pags+1))k1/ /k

Para la disminución exponencial, creo (especulativamente) que podría adaptar este enfoque a los mínimos cuadrados ponderados, dando a cada nuevo valor un peso mayor que 1. No debería ser necesario mantener un búfer de valores anteriores o eliminar datos antiguos.

Referencias

JH Maindonald, Cálculo estadístico. J. Wiley & Sons, 1984. Capítulo 4.

DA Belsley, E. Kuh, RE Welsch, Diagnóstico de regresión: identificación de datos influyentes y fuentes de colinealidad. J. Wiley & Sons, 1980.


1
¿El método que describe Maindonald está relacionado o es igual al algoritmo de Gentleman? jstor.org/stable/2347147
onestop

66
En ese caso, vea también las extensiones de Alan Miller jstor.org/stable/2347583 . Un archivo de su sitio de software Fortran se encuentra ahora en jblevins.org/mirror/amiller
onestop

55
Aparece un algoritmo explícito en la parte inferior de la p. 4 de saba.kntu.ac.ir/eecd/people/aliyari/NN%20%20files/rls.pdf . Esto se puede encontrar buscando en Google "mínimos cuadrados recursivos". No parece una mejora en el enfoque Gentleman / Maindonald, pero al menos se describe de manera clara y explícita.
whuber

2
El último enlace se parece al método que iba a sugerir. La identidad matricial que utilizan se conoce en otros lugares como la identidad Sherman - Morrison - Woodbury. También es bastante eficiente desde el punto de vista numérico, pero puede no ser tan estable como una rotación de Givens.
cardenal

2
@suncoolsu Hmm ... El libro de Maindonald se publicó recientemente cuando comencé a usarlo :-).
whuber

8

Creo que reestructurar su modelo de regresión lineal en un modelo de espacio de estado le dará lo que busca. Si usa R, es posible que desee usar el paquete dlm y eche un vistazo al libro complementario de Petris et al.


tal vez estoy confundido pero esto parece referirse a un modelo de serie temporal? mi modelo es en realidad más simple en que las muestras no son una serie de tiempo (la eficacia con que se x-> y) muestras (independientes, no son más que acumulan en grandes cantidades a través del tiempo)
mikera

1
Sí, en el caso general esto se usa para series de tiempo con observaciones no independientes; pero siempre puede suponer una correlación incorrecta entre observaciones sucesivas, lo que le da un caso especial de interés.
F. Tusell

7

Usted siempre puede realizar descenso de gradiente sobre la suma de los cuadrados costó WRT los parámetros de su modelo W . Simplemente tome el gradiente de él, pero no busque la solución de formulario cerrado, sino solo la dirección de búsqueda.miW

Deje sea el costo de la muestra de entrenamiento i'th dados los parámetros W . Su actualización para el parámetro j'th es entoncesmi(yo;W)W

WjWj+αmi(yo;W)Wj

donde es una tasa de pasos, que debe elegir mediante validación cruzada o una buena medida.α

Esto es muy eficiente y la forma en que se entrenan las redes neuronales. Puede procesar incluso muchas muestras en paralelo (por ejemplo, unas 100 o más) de manera eficiente.

Por supuesto, se pueden aplicar algoritmos de optimización más sofisticados (impulso, gradiente conjugado, ...).


Parece muy similar a este documento eprints.pascal-network.org/archive/00002147/01/… . Se implementó en un proyecto de código abierto llamado jubatus.
sacarina

3

Sorprendido, nadie más tocó esto hasta ahora. La regresión lineal tiene una función objetivo cuadrática. Entonces, un paso de Newton Raphson desde cualquier punto de partida lo lleva directamente a la optima. Ahora, digamos que ya hiciste tu regresión lineal. La función objetivo es:

L(β)=(yXβ)t(yXβ)
El gradiente se convierte en
L(β)=2Xt(yXβ)
Y la arpillera:
2L(β)=XtX

Ahora, obtuvo algunos datos pasados ​​e hizo una regresión lineal y está sentado con sus parámetros ( β ). El gradiente en este punto es cero por definición. El hessian es como se dio anteriormente. Llega un nuevo punto de datos ( xnew,ynew ). Simplemente calcule el gradiente para el nuevo punto mediante:

Lnew(β)=2xnew(ynewxnewTβ)
y eso se convertirá en su gradiente general (ya que el gradiente de los datos existentes era cero). El hessian para el nuevo punto de datos es:

2Lnew=xnewxnewT
.

Agregue esto al viejo hessian dado anteriormente. Luego, solo da un paso de Newton Raphson.

βnew=βold+(2L)1Lnew

Y tu estas listo.


1
Lnortemiwpags,O(pags3)

O(pags3)pags(yo-UNA)-1=yo+UNA+UNA2+...

2

El ajuste estándar de mínimos cuadrados proporciona coeficientes de regresión

β=(XTX)-1XTY

β

XTXXTYMETRO2+METROβ

Por ejemplo, si M = 1, entonces el coeficiente uno es

β=yo=1norteXyoyyoyo=1norteXyo2

así que cada vez que obtienes un nuevo punto de datos actualizas ambas sumas y calculas la relación y obtienes el coeficiente actualizado.

XTXXTY(1-λ)λ


2
β

XTXXTY

66
XX

1
C-1XCXzt+1=zt+X-CztzC-1Xt

1

El problema se resuelve más fácilmente cuando reescribe un poco las cosas:

Y = y

X = [x, 1]

entonces

Y = A * X

Se encuentra una solución única calculando

V = X '* X

y

C = X '* Y

tenga en cuenta que la V debe tener un tamaño N-por-N y C un tamaño de N-por-M. Los parámetros que está buscando vienen dados por:

A = inv (V) * C

Dado que tanto V como C se calculan sumando sus datos, puede calcular A en cada nueva muestra. Sin embargo, esto tiene una complejidad temporal de O (N ^ 3).

Como V es cuadrado y positivo semi-definido, existe una descomposición LU, que hace que la inversión de V sea numéricamente más estable. Existen algoritmos para realizar actualizaciones de rango 1 al inverso de una matriz. Encuéntralos y tendrás la implementación eficiente que estás buscando.

Los algoritmos de actualización de rango 1 se pueden encontrar en "Cálculos matriciales" de Golub y van Loan. Es un material resistente, pero tiene una visión general completa de tales algoritmos.

Nota: El método anterior proporciona una estimación de mínimos cuadrados en cada paso. Puede agregar fácilmente pesos a las actualizaciones de X e Y. Cuando los valores de X e Y crecen demasiado, puede escalarlos un solo escalar, sin afectar el resultado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.