5 votos

¿Cómo puedo hacer regresiones con "big data" más rápido en R?

Así que estoy ejecutando una regresión en R, con la siguiente fórmula:

``

La cuestión es que x3 tiene niveles de 10000, así hay un poco más de 10000 predictores.

La regresión se ejecuta rápido cuando hay 30000 observaciones, pero es terriblemente lenta cuando hay 300000 observaciones. ¿Hay alguna manera puedo hacerlo más rápido?

2voto

Manuel Puntos 6

Tres maneras, Una es que la película función está haciendo un MONTÓN de cosas bajo el capó. Calcula los valores de parámetro, stadnard desviaciones, los valores de p, y muchas muchas cosas más. Si desea ver esta información, llame a str(lm0) donde lm0 si el modelo lineal y usted verá un montón de cosas. Así que la primera cosa es escribir una mucho más pequeña función que simplemente hace lo que quiere. Ya se trate de valores de los parámetros o valores de + pvalues.

La segunda cosa que me gustaría saltar a es una matriz diferentes de la factorización de la primera. Regresión lineal en R puede ser acelerado por hacer una de Gram-Schmidt facotrization de su matriz en primer lugar antes de retroceder. (https://cran.r-project.org/web/packages/matlib/vignettes/gramreg.html)

Y por último, como para la optimización de los algoritmos de gradiente de la pendiente puede ser más rápido. Esto es debido a que R intenta encontrar una solución analítica para su problema de regresión. Pero en las grandes datos contextos, hacer esto es muy costoso. Para aproximar soluciones de gradiente de descenso de comercio una solución exacta que lleva siglos en calcular con una solución aproximada que es mucho más rápido para resolver. Sin embargo, usted puede hacer mucho mejor que el gradiente de la pendiente. Gradiente de la pendiente es la genérica de un algoritmo de optimización que no toma ventaja de la única convexa de la estructura del problema de optimización. Un algoritmo que no es la forma Iterativa Reponderadas de los mínimos Cuadrados (NIÑAS) algoritmo. Esto puede ser más rápido de modificar el glm.parámetros de control como los parámetros por defecto será más lento que el predeterminado de la función lm. Y, finalmente, como alguien ha mencionado en los comentarios anteriores, la glmnet paquete también tiene muy eficientes algoritmos para el ajuste de los parámetros de regresión.

Algo que también me ha ayudado bastante ha sido el de Microsoft I (antes de la Revolución R) del programa. Esta implementación de R se dice que ser enfocado en traer multithreded bibliotecas matemáticas a R. Y mientras que el conocimiento de multithreading es fuera de mi experiencia, he conseguido notables incrementos en la velocidad de este. El de Microsoft relacionado R Cliente también cuenta con una mejor compatibilidad con chispa y hadoop, que podría ser de ayuda también.

1voto

Awais Tariq Puntos 116

Un montón de bellas comentarios y respuestas aquí, pero es realmente necesario? Este es un modelo muy simple. Vamos a volver a escribir como

$$ y = \beta_1(x_1 - \mu_1) + \beta_2(x_2 - \mu_2) + \phi_f + \epsilon $$

where $\phi_f$ is the offset due to factor $f$. Clearly, $\phi_f$ is the average value of the response when the independent variables are at their mean values.

With the vast number of factor levels you have, it makes sense to treat $\phi_f$ as a random effect, so don't use glm or lm Using lmemight still cost a lot of time, but would you really lose that much by fitting the linear model and the factor model independently? If the sample is random and the number of items at each level is roughly the same, I'm not sure that you would lose much by estimating the random effects as the average over the $s$'s at each level. Then do the regression without the factors -- the factor effects will basically be rolled into the error $\epsilon$.

Usted no va a obtener exactamente la misma respuesta que si se hizo de la forma correcta, pero en realidad, es el extra tiempo de cómputo de la pena, si que está causando graves la pena.

Otra opción, que nunca he probado, pero puede ser de ayuda, sería conseguir el ingenuo estimaciones he descrito anteriormente y, a continuación, realice una o dos iteraciones mediante el algoritmo EM para la mejora de las versiones, pero no intento ir todo el camino a la convergencia con todos los datos y todos esos parámetros.

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