38 votos

¿Existen algoritmos para calcular los parámetros de regresión lineal o logística "en marcha"?

Un documento "Calculando con precisión la varianza en funcionamiento" en http://www.johndcook.com/standard_deviation.html muestra cómo calcular la media, la varianza y las desviaciones estándar.

¿Existen algoritmos en los que los parámetros de un modelo de regresión lineal o logística puedan actualizarse de forma similar "dinámicamente" a medida que se proporciona cada nuevo registro de entrenamiento?

6voto

Otras respuestas han apuntado al mundo del aprendizaje automático, y ciertamente es un lugar donde se ha abordado este problema.

Sin embargo, otro enfoque que puede adaptarse mejor a sus necesidades es el uso de la factorización QR con actualizaciones de bajo rango. Los enfoques para hacer esto y utilizarlo para resolver problemas de mínimos cuadrados se dan en:

Actualización de la factorización QR y el problema de los mínimos cuadrados por Hammerling y Lucas.

2voto

Chris Puntos 116

Esto es para añadir a la respuesta de @chmike.

El método parece ser similar al algoritmo en línea de B. P. Welford para la desviación estándar que también calcula la media. John Cook da una buena explicación aquí . Tony Finch en 2009 proporciona un método para una media móvil exponencial y una desviación estándar:

diff := x – mean 
incr := alpha * diff 
mean := mean + incr 
variance := (1 - alpha) * (variance + diff * incr)

Mirando la respuesta publicada anteriormente y ampliándola para incluir una ventana móvil exponencial:

init(): 
    meanX = 0, meanY = 0, varX = 0, covXY = 0, n = 0,
    meanXY = 0, varY = 0, desiredAlpha=0.01 #additional variables for correlation

update(x,y):
    n += 1
    alpha=max(desiredAlpha,1/n) #to handle initial conditions

    dx = x - meanX
    dy = y - meanY
    dxy = (x*y) - meanXY #needed for cor

    varX += ((1-alpha)*dx*dx - varX)*alpha
    varY += ((1-alpha)*dy*dy - varY)*alpha #needed for corXY
    covXY += ((1-alpha)*dx*dy - covXY)*alpha

    #alternate method: varX = (1-alpha)*(varX+dx*dx*alpha)
    #alternate method: varY = (1-alpha)*(varY+dy*dy*alpha) #needed for corXY
    #alternate method: covXY = (1-alpha)*(covXY+dx*dy*alpha)

    meanX += dx * alpha
    meanY += dy * alpha
    meanXY += dxy  * alpha

getA(): return covXY/varX
getB(): return meanY - getA()*meanX
corXY(): return (meanXY - meanX * meanY) / ( sqrt(varX) * sqrt(varY) )

En el "código" anterior, desiredAlpha podría establecerse en 0 y, de ser así, el código funcionaría sin ponderación exponencial. Se puede sugerir establecer desiredAlpha a 1/desiredWindowSize como sugiere Media móvil modificada para un tamaño de ventana móvil.

Pregunta al margen: de los cálculos alternativos anteriores, ¿algún comentario sobre cuál es mejor desde el punto de vista de la precisión?

Referencias:

chmike (2013) https://stats.stackexchange.com/a/79845/70282

Cook, John (s.f.) Cálculo preciso de la varianza de la carrera http://www.johndcook.com/blog/standard_deviation/

Finch, Tony. (2009) Cálculo incremental de la media y la varianza ponderadas. https://fanf2.user.srcf.net/hermes/doc/antiforgery/stats.pdf

Wikipedia. (s.f.) Algoritmo en línea de Welford https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Online_algorithm

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X