Como o NumPy resolve mínimos quadrados para sistemas sub-determinados?

14

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

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

Esperaríamos que isso funcionasse apenas se X tivesse a forma (N, 5) onde N> = 5 Mas por que e como?

Recebemos de volta 5 pesos conforme o esperado, mas como esse problema é resolvido?

Não é como se tivéssemos 2 equações e 5 incógnitas?
Como numpy poderia resolver isso?
Ele deve fazer algo como interpolação para criar equações mais artificiais?

George Pligoropoulos
fonte
3
Por que não deveria funcionar? Um sistema indeterminado tem muitas soluções.
Matthew Gunn
? Você pode ter uma ligação com a teoria relevante ..
George Pligoropoulos

Respostas:

19

Meu entendimento é que o numpy.linalg.lstsq depende da rotina LAPACK dgelsd .

O problema é resolver:

minimize(overx)Axb2

Obviamente, isso não tem uma solução exclusiva para uma matriz A cuja classificação é menor que o comprimento do vetor b . No caso de um sistema indeterminado, dgelsdfornece uma solução z tal que:

  • Az=b
  • z2x2 para todos osx que satisfazemAx=b . (iez é a solução de norma mínima para o sistema indeterminado.

Exemplo, se o sistema for x+y=1 , numpy.linalg.lstsq retornaria x=.5,y=.5 .

Como o dgelsd funciona?

A rotina dgelsdcalcula a decomposição de valor singular (SVD) de A.

Vou apenas esboçar a idéia por trás do uso de um SVD para resolver um sistema linear. A decomposição do valor singular é uma fatoração vocêΣV=UMA onde você e V são matrizes ortogonais e Σ é uma matriz diagonal em que as entradas diagonais são conhecidas como valores singulares.

A classificação efetiva da matriz UMA será o número de valores singulares efetivamente diferentes de zero (ou seja, suficientemente diferentes de zero em relação à precisão da máquina, etc ...). Seja S uma matriz diagonal dos valores singulares diferentes de zero. O SVD é assim:

UMA=você[S0 00 00 0]V

O pseudo-inverso de UMA é dado por:

UMA=V[S-10 00 00 0]você

Considere a solução x=UMAb . Então:

UMAx-b=você[S0 00 00 0]VV[S-10 00 00 0]vocêb-b=você[Eu0 00 00 0]vocêb-b

Existem basicamente dois casos aqui:

  1. O número de valores singulares diferentes de zero (ou seja, o tamanho da matriz Eu ) é menor que o comprimento de b . A solução aqui não será exata; resolveremos o sistema linear no sentido dos mínimos quadrados.
  2. UMAx-b=0 0

você

Equivalência de pseudo-inverso

UMA

A=A(AA)1

Para um sistema indeterminado, você pode mostrar que o pseudo-inverso fornece a solução de norma mínima.

A

A=(AA)1A

Matthew Gunn
fonte
O dgelsd usa SVD, mas o R lm usa QR?
Haitao Du
@ hxd1011R lmusa a fatoração QR por padrão, mas você pode especificar alternativas.
Sycorax diz Reinstate Monica