J'essaie de reproduire les idées de la page Eigenface sur wikipedia. A partir d'une centaine d'échantillons d'images représentés par une matrice de données (où chaque image aplatie en un vecteur de longueur , donc est une matrice par ), j'ai calculé une décomposition SVD:
Par conséquent:
En prenant un sous-ensemble des plus grands modes propres , je peux approximer la matrice (soit ):
Maintenant, étant donné un nouveau vecteur , qui représente une image qui n'est pas dans , comment puis-je déterminer la pondération des vecteurs propres pour représenter au mieux ma nouvelle image ? À l'exception des cas pathologiques, cette représentation est-elle unique?
En bref, ce que j'aimerais faire, c'est ceci (à partir de la page wiki):
Ces faces propres peuvent maintenant être utilisées pour représenter à la fois les faces existantes et nouvelles : nous pouvons projeter une nouvelle image (moyenne soustraite) sur les faces propres et ainsi enregistrer en quoi cette nouvelle face diffère de la face moyenne.
Comment faire cette projection?
Réponses:
La "projection" à laquelle il est fait référence est une projection vectorielle . Pour calculer la projection du vecteur sur le vecteur b , vous utilisez le produit interne des deux vecteurs:a b
dans ce cas est la composante vectorielle de a qui se trouve dans la même direction que b . Dans l'espace euclidien, l'opérateur de produit interne est défini comme leurproduit scalaire:aproj a b
où est le nombre de composants dans les vecteurs a et b et a i et b i sont respectivement le i- ème composant des vecteurs a et b . Intuitivement, en calculant le produit intérieur des deux vecteurs, vous trouvez "combien de" vecteur a va dans la direction du vecteur b . Notez qu'il s'agit d'une quantité signée, donc une valeur négative signifierait que l'angle entre les deux vecteurs est supérieur à 90 degrés, comme illustré par une autre définition pour l'opérateur de projection:n a b ai bi i a b a b
où est l'angle entre les deux vecteurs.θ
Donc, étant donné un vecteur et un tas de vecteurs de base b i , on peut trouver "combien de a " va dans chacune des directions de chacun des vecteurs de base. Typiquement, ces vecteurs de base seront tous mutuellement orthogonaux. Dans votre cas, la SVD est une décomposition orthogonale, donc cette condition doit être remplie. Donc, pour accomplir ce que vous décrivez, vous devez prendre la matrice des vecteurs propres U et calculer le produit interne du vecteur candidat y avec chacune des colonnes de la matrice:a bi a U y
La valeur scalaire que vous obtenez de chaque produit intérieur représente la façon dont le vecteur y "s'est aligné" avec le i- ème vecteur propre. Étant donné que les vecteurs propres sont orthonormés , vous pouvez alors reconstruire le vecteur d'origine y comme suit:pi y i y
Vous avez demandé si cette représentation est unique; Je ne sais pas exactement ce que vous voulez dire, mais ce n'est pas unique dans le sens où un vecteur donné pourrait être décomposé par projection sur n'importe quel nombre de bases orthonormales. Les vecteurs propres contenus dans la matrice U en sont un exemple, mais vous pouvez en utiliser plusieurs autres. Par exemple, le calcul de la transformée de Fourier discrète de y peut être considéré comme la projetant sur une base orthonormée de vecteurs exponentiels complexes de fréquence variable.y U y
la source