In che modo NumPy risolve i minimi quadrati per sistemi sottodeterminati?


14

Diciamo che abbiamo X di forma (2, 5)
e y di forma (2,)

Questo funziona: np.linalg.lstsq(X, y)

Ci aspetteremmo che funzionasse solo se X fosse di forma (N, 5) dove N> = 5 Ma perché e come?

Restituiamo 5 pesi come previsto, ma come viene risolto questo problema?

Non è che abbiamo 2 equazioni e 5 incognite?
Come ha potuto numpy risolvere questo?
Deve fare qualcosa come l'interpolazione per creare equazioni più artificiali? ..


3
Perché non dovrebbe funzionare? Un sistema indeterminato ha molte soluzioni.
Matthew Gunn,

Potresti avere un collegamento con la teoria pertinente? ..
George Pligoropoulos,

Risposte:


19

La mia comprensione è che numpy.linalg.lstsq si basa sulla routine dAPP di LAPACK .

Il problema è risolvere:

minimize(overx)Axb2

Naturalmente, questo non ha una soluzione unica per una matrice A il cui rango è inferiore alla lunghezza del vettore . Nel caso di un sistema indeterminato, fornisce una soluzione tale che:bdgelsdz

  • Az=b
  • z2x2 per tutti che soddisfano . (cioè è la soluzione di norma minima al sistema indeterminato.xAx=bz

Esempio, se il sistema è , numpy.linalg.lstsq restituirà .x+y=1x=.5,y=.5

Come funziona dgelsd?

La routine dgelsdcalcola la decomposizione del valore singolare (SVD) di A.

Mi limiterò a delineare l'idea alla base dell'utilizzo di un SVD per risolvere un sistema lineare. La decomposizione del valore singolare è una fattorizzazione dove e sono matrici ortogonali e è una matrice diagonale in cui le voci diagonali sono note come valori singolari.UΣV=AUVΣ

Il grado effettivo della matrice sarà il numero di valori singolari che sono effettivamente diversi da zero (cioè sufficientemente diversi da zero rispetto alla precisione della macchina, ecc ...). Sia una matrice diagonale di valori singolari diversi da zero. Lo SVD è quindi:AS

A=U[S000]V

Lo pseudo-inverso di è dato da:A

A=V[S1000]U

Considera la soluzione . Poi:x=Ab

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

Fondamentalmente ci sono due casi qui:

  1. Il numero di valori singolari diversi da zero (ovvero la dimensione della matrice ) è inferiore alla lunghezza di . La soluzione qui non sarà esatta; risolveremo il sistema lineare nel senso dei minimi quadrati.Ib
  2. Axb=0

Quest'ultima parte è un po 'complicata ... è necessario tenere traccia delle dimensioni della matrice e utilizzare che è una matrice ortogonale.U

Equivalenza di pseudo-inverso

Quando ha righe linearmente indipendenti (ad es. Abbiamo una matrice grassa), allora: A

A=A(AA)1

Per un sistema indeterminato, puoi mostrare che lo pseudo-inverso ti offre la soluzione di norma minima.

Quando ha colonne linearmente indipendenti (ad es. Abbiamo una matrice scarna), quindi: A

A=(AA)1A


dgelsd usa SVD ma R lm usa QR?
Haitao Du

@ hxd1011R lmutilizza la fattorizzazione QR per impostazione predefinita, ma è possibile specificare alternative.
Sycorax dice di reintegrare Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.