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? ..
least-squares
linear-algebra
numpy
George Pligoropoulos
fuente
fuente
Respuestas:
Tengo entendido que numpy.linalg.lstsq se basa en la rutina LAPACK dgelsd .
El problema es resolver:
Por supuesto, esto no tiene una solución única para una matriz A cuyo rango es menor que la longitud del vectorsi . En el caso de un sistema indeterminado, z tal que:
dgelsd
proporciona una soluciónEjemplo, si el sistema esx + y= 1 , numpy.linalg.lstsq devolvería x = .5 , y= .5 .
¿Cómo funciona dgelsd?
La rutina
dgelsd
calcula 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ónUΣ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 matrizA 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í:
El pseudoinverso deA viene dado por:
Considere la soluciónx=A†b . Luego:
Básicamente hay dos casos aquí:
Equivalencia de pseudoinverso
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†=(A′A)−1A′
fuente
lm
usa la factorización QR por defecto, pero puede especificar alternativas.