Loading [MathJax]/jax/element/mml/optable/MathOperators.js

37 votos

Complejidad computacional de la operación de regresión por mínimos cuadrados

En un algoritmo de regresión por mínimos cuadrados, tengo que hacer las siguientes operaciones para calcular los coeficientes de regresión:

  • Multiplicación de matrices, complejidad: O(C2N)
  • Inversión de la matriz, complejidad: O(C3)
  • Multiplicación de matrices, complejidad: O(C2N)
  • Multiplicación de matrices, complejidad: O(CN)

¿Cómo puedo determinar la complejidad computacional global de este algoritmo?

EDITAR: He estudiado la regresión por mínimos cuadrados del libro Introducción a la minería de datos por Pang Ning Tan. La explicación sobre la regresión lineal por mínimos cuadrados está disponible en el apéndice, donde se proporciona una solución mediante el uso de la ecuación normal (algo de la forma a=(XTX)1XTy) que implica 3 multiplicaciones de matrices y 1 inversión de matrices).

Mi objetivo es determinar la complejidad computacional global del algoritmo. Más arriba, he enumerado las 4 operaciones necesarias para calcular los coeficientes de regresión con su propia complejidad. Basándonos en esta información, ¿podemos determinar la complejidad global del algoritmo?

Gracias.

0 votos

¿Podría ampliar la información? Das tres medidas diferentes de esfuerzo para la multiplicación de matrices, y no estoy seguro de cuál es la correcta. Además, hay al menos tres métodos que conozco para hacer lineal mínimos cuadrados (y un poco más para no lineal mínimos cuadrados). ¿Qué intentas hacer? ¿De dónde has sacado el algoritmo que tienes actualmente?

0 votos

@J.M. He dado más detalles en mi pregunta. Por favor, hágamelo saber si necesita más información.

2 votos

Bien... formando M=XX es una multiplicación matricial. Formando b=Xy es una multiplicación matricial-vectorial. Pero, por favor, por favor , por favor no utilice la inversión+multiplicación para calcular c=M1b ¡! Es una mejor práctica computacional formar la descomposición Cholesky de M y utilizarlo en el cálculo de c .

55voto

Knox Puntos 1543

Para una regresión por mínimos cuadrados con N ejemplos de formación y C características, se necesita:

  • O(C2N) para multiplicar XT por X
  • O(CN) para multiplicar XT por Y
  • O(C3) para calcular la factorización LU (o Cholesky) de XTX y utilizarlo para calcular el producto (XTX)1(XTY)

Asintóticamente, O(C2N) domina O(CN) para que podamos olvidar el O(CN) parte.

Como estás usando la ecuación normal, asumiré que N>C - en caso contrario, la matriz XTX sería singular (y por tanto no invertible), lo que significa que O(C2N) domina asintóticamente O(C3) .

Por lo tanto, la complejidad temporal total es O(C2N) . Hay que tener en cuenta que esto es sólo la complejidad asintótica - en particular, para C , N pequeño, es posible que el cálculo de la descomposición LU o Cholesky de XTX tarda bastante más que la multiplicación de XT por X .

Editar: Tenga en cuenta que si tiene dos conjuntos de datos con las mismas características, etiquetados como 1 y 2, y ya ha calculado XT1X1 , XT1Y1 y XT2X2 , XT2Y2 luego entrenar el combinado El conjunto de datos es sólo O(C3) ya que sólo hay que sumar las matrices y vectores correspondientes, y luego resolver un C×C sistema lineal.

En particular, esto le permite hacer un bootstrap muy rápido, jackknife y validación cruzada cuando está entrenando una regresión OLS (o variantes como la regresión ridge, lasso, OLS restringida, etc).

7 votos

Gracias por la respuesta, Chris. Estoy realmente impresionado por cómo te das cuenta de que N > C, por lo que O(C^2N) domina a O(C^3).

11 votos

¿Sería posible tener una referencia formal de la complejidad computacional de OLS (un artículo, un libro de texto o algo similar)? Me gustaría citarlo en un trabajo académico.

1voto

user1271772 Puntos 76

Estaba confundido en cuanto a por qué la multiplicación de la matriz se afirma que es O(C2N) aquí, que es O(N3) cuando N=C que es mucho más lento que el de Strassen O(N2.8) y la de Le Gall O(N2.37) .

Resulta que estamos haciendo una multiplicación matricial rectangular donde N . Hay muchos más datos que variables.

Hay algoritmos con un escalamiento mucho mejor que el ingenuo \mathcal{O}(C^2N) costo para la parte dominante en la respuesta de Chris Taylor.

Puedes multiplicar X^TX con complejidad \mathcal{O}(C^{1.8}N) si se utiliza la de Strassen \mathcal{O}(C^{2.8}) coste de C \times C matrices, y en teoría también se puede hacer con \mathcal{O}(C^{1.37}N) si se utiliza el complejidad más conocida para la multiplicación de C \times C matrices (pero hay que tener en cuenta que a menudo se prefiere el algoritmo de Strassen debido a la gran constante de este último).

Lo he obtenido de la primera ecuación de la página 262 de este documento por medio de la configuración:

  • m=p=C
  • n=N
  • N > C
  • \omega = 2.8 para Strassen, y 2.37 para el algoritmo con mejor coste asintótico teórico (pero no práctico).

2 votos

En la práctica, estos algoritmos más rápidos tienen menos que ofrecer de lo que se piensa. La multiplicación matricial ingenua tiene un importante potencial de optimización que la hace generalmente más rápida en la práctica.

0voto

Antonio Puntos 11

En este trabajo https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/153646/eth-6011-01.pdf?sequence=1&isAllowed=y En las páginas 32 y 33 se discuten las dos posibilidades de implementación (la alternativa de eliminación gaussiana frente al uso de la descomposición QR) si está interesado en el coste real en términos de DFLOP.

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