SVD d'une matrice de données après une projection orthogonale à un sous-espace

9

Disons que je peux connaître la SVD d'une matrice :X

X=USVT

Si j'ai une matrice orthogonale (c'est-à-dire que est carré et a des colonnes orthonormées), alors la SVD de estAAXA

XA=USWT
où .W=ATV

Mais peut-on dire quelque chose sur la SVD de si a des colonnes orthonormées mais n'est pas nécessairement carré? En d'autres termes, si la SVD de est , les matrices , ou peuvent-elles être écrites en termes de SVD de et ?XBBXBXB=DEFTDEFXB


Mise à jour: @whuber suggère que je puisse étendre pour qu'il soit orthogonal en ajoutant des colonnes orthonormales jusqu'à ce que soit carré. Appelez cette matrice orthogonale .BBB~

B~=[B;B]

Je sais que le SVD de est (voir ci-dessus). Mais maintenant , je me bats pour voir s'il y a une façon que je peux écrire le SVD de en termes de SVD de .XB~US(B~TV)TXBXB~

mobeets
la source
Par exemple, ce n'est pas le cas que la SVD de , c'est ce que nous avons si nous savons que est carré. En effet, n'est pas une matrice carrée, ce qui devrait être vrai pour le SVD. cependant toujours des colonnes orthonormées. XB=US(BTV)TBBTVBTV
mobeets
3
B peut être prolongé en attachant des colonnes orthonormales supplémentaires dans une matrice orthogonale (utilisez le processus de Gram-Schmidt, par exemple), réduisant ainsi votre question au premier cas.
whuber
1
Cool, merci @whuber. Donc , dire est la version orthogonalisée de . Connaître le SVD de me dira-t-il quelque chose sur le SVD de ? BBXBXB
mobeets
Écrivez-le et vous verrez à quel point la relation est simple et claire.
whuber
@whuber Je ne peux pas vraiment le voir ... Voici ce que j'ai essayé: Let . Alors . B=[B;B]XB=[XB;XB]=US(BTV)T=US([BTBT]V)T=US[BTVBTV]T
mobeets

Réponses:

3

Dans le SVD , où est une matrice , est une matrice orthogonale .X=USVXn×pVp×p

Supposons que soit une matrice orthogonale : c'est-à-dire . LaisserBp×qBB=1q

(1)SVB=TDW

être un SVD de . Ainsi, par définition, est une matrice , est une matrice diagonale de dimension et est une matrice orthogonale .SVBTp×qDqWq×q

Calculer

(2)XB=(USV)B=U(SVB)=U(TDW)=(UT)D(W).

Parce que , a des colonnes orthonormées. Parce que et font partie d'une SVD, alors par définition est diagonal avec des entrées non négatives et est une matrice orthogonale . Par conséquent, l' équation donne une SVD de . L' équation montre comment cette SVD est apparentée à celle de et .(UT)(UT)=T(UU)T=TT=1qUTDWDWq×q(2)XB(1)XB

whuber
la source
1
Merci d'avoir répondu. Bien qu'il semble que ce soit un moyen de trouver le SVD deXB via le calcul de la SVD de SVB, au lieu d'utiliser uniquement le SVD de X. J'espérais savoir s'il y avait un moyen de trouver le SVD deXB sans avoir à calculer des SVD supplémentaires, comme cela est possible lorsque Best carré.
mobeets
3

Pour une matrice B avec des colonnes orthonormées (mais pas carrées), je voudrais un moyen de trouver un SVD de XB en termes de SVD de X=USVT.

Comme suggéré par @whuber, une première étape vers la recherche de la SVD de XB consiste à ajouter des colonnes à Bpour le rendre carré (et donc orthogonal). Appelez cette matriceB~=[B;B]et laissez k être le nombre de colonnes de B. Ensuite parce queB~ est orthogonal, si X=USVT est un SVD de X, puis XB~=US(B~TV)T est un SVD de XB~.

Parce que XB peut être obtenu auprès de XB~ en laissant tomber le dernier k colonnes, mon problème d'origine se réduit maintenant à ce qui suit: Étant donné la SVD d'une matrice Y=DEFT, existe-t-il un moyen de trouver la SVD de Y=DEFT, où Y est la matrice résultant de l'abandon du dernier k colonnes de Y? (Ici j'aiY=XB~ et Y=XB.)

Ce problème est appelé «mise à jour de la SVD», et en général, il semble y avoir de nombreuses approches pour ce faire. Une approche pertinente se trouve ici , et plus de discussion ici .

Mais en général, étant donné que les algorithmes pour rétrograder la SVD semblent être un domaine de recherche active, je conclus qu'il n'y a pas de moyen simple de trouver la SVD deXB étant donné uniquement la SVD de X.

mobeets
la source
1
+1. Je pense que vous identifiez correctement le problème: il n'y a pas de méthode "simple". Je trouve cela plutôt intuitif si vous considérez un simple exemple de jouet: par exemple un nuage de données 2D allongé dans la direction diagonale. Les deux vecteurs singuliers originaux sont diagonaux. La multiplication de la matrice de données par une matrice orthogonale carrée fait simplement tourner l'ensemble du nuage, de sorte que les vecteurs singuliers restent les mêmes, jusqu'à la rotation. Mais la projection du nuage de données par exemple sur la ligne horizontale (sous-espaces 1D) changera complètement sa forme; maintenant le seul vecteur singulier est horizontal. Les nouveaux vecteurs singuliers ne sont pas liés aux anciens.
amibe
C'est une excellente explication intuitive de la différence. Au début, je trouvais assez troublant qu'il puisse y avoir une relation aussi simple pour les matrices orthogonales, mais plus une fois que vous supprimez une seule colonne de cette matrice. Mais tout cela a du sens maintenant. Merci!
mobeets
Je suis d'accord. Quand j'ai lu votre post pour la première fois, j'ai pensé: quelle question naïve! :-) clairement il suffit de faire tourner les vecteurs singuliers (avec une matrice "étendue" pour être une matrice de rotation, comme l'a écrit whuber) puis d'en déposer certains (correspondant à la partie "étendue"). Mais c'est bien sûr faux.
amoeba