¿Cómo resuelve NumPy mínimos cuadrados para sistemas subdeterminados?

14

Digamos que tenemos X de forma (2, 5)
e y de forma (2,)

Esto funciona: np.linalg.lstsq(X, y)

Es de esperar que esto funcione solo si X tenía forma (N, 5) donde N> = 5 Pero, ¿por qué y cómo?

Volvemos 5 pesos como se esperaba, pero ¿cómo se resuelve este problema?

¿No es que tenemos 2 ecuaciones y 5 incógnitas?
¿Cómo podría numpy resolver esto?
Debe hacer algo como la interpolación para crear más ecuaciones artificiales? ..

George Pligoropoulos
fuente
3
¿Por qué no debería funcionar? Un sistema indeterminado tiene muchas soluciones.
Matthew Gunn el
¿Podría tener un enlace a la teoría relevante? ..
George Pligoropoulos

Respuestas:

19

Tengo entendido que numpy.linalg.lstsq se basa en la rutina LAPACK dgelsd .

El problema es resolver:

minimize(overx)Axb2

Por supuesto, esto no tiene una solución única para una matriz A cuyo rango es menor que la longitud del vector b . En el caso de un sistema indeterminado, dgelsdproporciona una solución z tal que:

  • Az=b
  • z2x2 para todas lasx que satisfacenAx=b . (es decir,z es la solución de norma mínima para el sistema indeterminado.

Ejemplo, si el sistema es x+y=1 , numpy.linalg.lstsq devolvería x=.5,y=.5 .

¿Cómo funciona dgelsd?

La rutina dgelsdcalcula la descomposición del valor singular (SVD) de A.

Esbozaré la idea detrás de usar un SVD para resolver un sistema lineal. La descomposición del valor singular es una factorización UΣV=A donde U y V son matrices ortogonales y Σ es una matriz diagonal donde las entradas diagonales se conocen como valores singulares.

El rango efectivo de la matriz A será el número de valores singulares que efectivamente no son cero (es decir, suficientemente diferentes de cero en relación con la precisión de la máquina, etc.). Sea S una matriz diagonal de los valores singulares distintos de cero. La SVD es así:

A=U[S000]V

El pseudoinverso de A viene dado por:

A=V[S1000]U

Considere la solución x=Ab . Luego:

Axb=U[S000]VV[S1000]Ubb=U[I000]Ubb

Básicamente hay dos casos aquí:

  1. Ib
  2. Axb=0

U

Equivalencia de pseudoinverso

A

A=A(AA)1

Para un sistema indeterminado, puede demostrar que el pseudo-inverso le brinda la solución de norma mínima.

Cuando tiene columnas linealmente independientes (por ejemplo, tenemos una matriz delgada), entonces: A

A=(AA)1A

Matthew Gunn
fuente
dgelsd usa SVD pero R lm usa QR?
Haitao Du
@ hxd1011R's lmusa la factorización QR por defecto, pero puede especificar alternativas.
Sycorax dice Reinstate Monica