18 votos

¿Cómo se solucionó mínimos cuadrados para underdetermined sistemas NumPy?

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

Esto funciona:``

Esperamos que esto funcione sólo si X era de la forma (N, 5) donde N > = 5, pero ¿por qué y cómo?

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

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

26voto

Martin Robins Puntos 1893

Mi entendimiento es que numpy.lingalg.lstsq se basa en la LAPACK rutina dgelsd.

El problema es resolver:

$$ \text{minimize} (\text{over} \; \mathbf{x}) \quad \| A\mathbf{x} - \mathbf{b} \|_2$$

Of course, this does not have a unique solution for a matrix A whose rank is less than length of vector $\mathbf{b}$. In the case of an undetermined system, dgelsd provides a solution $\mathbf{z}$ such that:

  • $\mathbf{z} = \mathbf{b}$
  • $\| \mathbf{z} \|_2 \leq \|\mathbf{x} \|_2$ todos los $\mathbf{x}$ que satisfacer $A\mathbf{x} = \mathbf{b}$. (es decir, $\mathbf{z}$ es el mínimo de la norma de la solución a la indeterminación del sistema.

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

¿Cómo dgelsd trabajo?

La rutina dgelsd calcula la descomposición de valor singular (SVD) de A.

Voy a esbozar la idea detrás del uso de un SVD para resolver un sistema lineal. La descomposición de valor singular es una factorización de la $U \Sigma V' = A$ donde $U$ $V$ son matrices ortogonales y $\Sigma$ es una matriz diagonal donde la diagonal entradas son conocidos como valores singulares.

La efectiva rango de la matriz $A$ será el número de valores singulares que son efectivamente distinto de cero (es decir, lo suficientemente diferente de cero relativo a la precisión de la máquina, etc...). Deje $S$ ser una matriz diagonal de la no-cero valores singulares. El SVD es así:

$$ A = U \begin{bmatrix} S & 0 \\ 0 & 0 \end{bmatrix} V' $$

The pseudo-inverse of $Un$ is given by:

$$ A^\dagger = V \begin{bmatrix} S^{-1} & 0 \\ 0 & 0 \end{bmatrix} U' $$

Consider the solution $\mathbf{x} = A^\daga \mathbf{b}$. Entonces:

\begin{align*} A\mathbf{x} - \mathbf{b} &= U \begin{bmatrix} S & 0 \\ 0 & 0 \end{bmatrix} V' V \begin{bmatrix} S^{-1} & 0 \\ 0 & 0 \end{bmatrix} U' \mathbf{b} - \mathbf{b} \\ &= U \begin{bmatrix} I & 0 \\ 0 & 0 \end{bmatrix} U' \mathbf{b} - \mathbf{b}\\ \end{align*}

Hay básicamente dos casos aquí:

  1. El número de valores singulares (por ejemplo, tamaño de la matriz $I$) es menor que la longitud de $\mathbf{b}$. Aquí la solución no ser exactos, vamos a resolver el sistema lineal en un sentido de los mínimos cuadrados.
  2. $A\mathbf{x} - \mathbf{b} = \mathbf{0}$

Esta última parte es un poco complicada... es necesario hacer un seguimiento de la matriz de las dimensiones y el uso que $U$ es una matriz ortogonal.

La equivalencia de la pseudo-inversa

Al $A$ ha filas linealmente independientes (por ejemplo. tenemos una grasa de la matriz), entonces: $$A^\dagger = A'\left(AA' \right)^{-1}$$

For an undetermined system, you can show that the pseudo-inverse gives you the minimum norm solution.

When $Un$ ha columnas linealmente independientes, (ej. tenemos un flaco de la matriz), entonces: $$A^\dagger = \left(A'A \right)^{-1}A'$$

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