Disons que nous avons X de forme (2, 5)
et y de forme (2,)
Cela marche: np.linalg.lstsq(X, y)
Nous nous attendrions à ce que cela ne fonctionne que si X était de forme (N, 5) où N> = 5 Mais pourquoi et comment?
Nous récupérons 5 poids comme prévu, mais comment ce problème est-il résolu?
N'est-ce pas comme si nous avions 2 équations et 5 inconnues?
Comment numpy pourrait-il résoudre ce problème?
Il doit faire quelque chose comme l'interpolation pour créer des équations plus artificielles? ..
least-squares
linear-algebra
numpy
George Pligoropoulos
la source
la source
Réponses:
Ma compréhension est que numpy.linalg.lstsq s'appuie sur la routine LAPACK dgelsd .
Le problème est de résoudre:
Bien sûr, cela n'a pas de solution unique pour une matrice A dont le rang est inférieur à la longueur du vecteur . Dans le cas d'un système indéterminé, fournit une solution telle que:b z
dgelsd
Par exemple, si le système est , numpy.linalg.lstsq retournera .x+y=1 x=.5,y=.5
Comment fonctionne dgelsd?
La routine
dgelsd
calcule la décomposition en valeurs singulières (SVD) de A.Je vais simplement esquisser l'idée derrière l'utilisation d'un SVD pour résoudre un système linéaire. La décomposition en valeurs singulières est une factorisation où et sont des matrices orthogonales et est une matrice diagonale où les entrées diagonales sont appelées valeurs singulières.UΣV′=A U V Σ
Le rang effectif de la matrice sera le nombre de valeurs singulières qui sont effectivement non nulles (c'est-à-dire suffisamment différentes de zéro par rapport à la précision de la machine etc ...). Soit une matrice diagonale des valeurs singulières non nulles. Le SVD est donc:A S
Le pseudo-inverse de est donné par:A
Considérez la solution . Alors:x=A†b
Il y a essentiellement deux cas ici:
Cette dernière partie est un peu délicate ... il faut garder une trace des dimensions de la matrice et utiliser que est une matrice orthogonale.U
Équivalence de pseudo-inverse
Quand a des lignes linéairement indépendantes (par exemple, nous avons une matrice grasse), alors:A A†=A′(AA′)−1
Pour un système indéterminé, vous pouvez montrer que le pseudo-inverse vous donne la solution de norme minimale.
Lorsque a des colonnes linéairement indépendantes (par exemple, nous avons une matrice maigre), alors:A A†=(A′A)−1A′
la source
lm
utilise la factorisation QR par défaut mais vous pouvez spécifier des alternatives.