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
¿Cuál es el mejor algoritmo para crear una estimación de actualización continua de los parámetros de regresión lineal y ?b
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 y
- 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.
Respuestas:
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 )X T Q QX=(T,0)′ v X 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)′ t T T t T Q
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.p+1 p p+1 p+1 T O((p+1)2) O((p+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(p+1)) k 1 / 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.
fuente
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.
fuente
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.mi W
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( i ; W) W
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, ...).
fuente
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:
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 ( Xn e w,ynew ). Simplemente calcule el gradiente para el nuevo punto mediante:
Agregue esto al viejo hessian dado anteriormente. Luego, solo da un paso de Newton Raphson.
Y tu estas listo.
fuente
El ajuste estándar de mínimos cuadrados proporciona coeficientes de regresión
Por ejemplo, si M = 1, entonces el coeficiente uno es
así que cada vez que obtienes un nuevo punto de datos actualizas ambas sumas y calculas la relación y obtienes el coeficiente actualizado.
fuente
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.
fuente