Ajuste de nuevas imágenes de un cálculo SVD / PCA

16

Estoy tratando de replicar las ideas de la página de Eigenface en wikipedia. A partir de un centenar de imágenes de muestra representadas por una matriz de datos (donde cada imagen se aplana a un vector de longitud n , por lo tanto, X es una matriz de 100 por n ), he calculado una descomposición SVD:XnX100n

X=UΣVT

por lo tanto:

XXT=UΣ2UT

Al tomar un subconjunto de los modos propios más grandes , puedo aproximar la matriz (dejemos σ 1σ 2 ):qσ1σ2

Xσ1u1v1T+σ2u2v2T++σquqvqT

Ahora, dado un nuevo vector , que representa una imagen que no está en X , ¿cómo determino la ponderación de los q vectores propios U para representar mejor mi nueva imagen y ? Excepto en casos patológicos, ¿es esta representación única?yXqUy

En resumen, lo que me gustaría hacer es esto (desde la página wiki):

Estas caras propias ahora se pueden usar para representar caras nuevas y existentes : podemos proyectar una nueva imagen (resta media) en las caras propias y así registrar cómo esa cara nueva difiere de la cara media.

¿Cómo hago esa proyección?

Enganchado
fuente
1
Los futuros lectores pueden encontrar esta implementación valiosa.
Emre

Respuestas:

11

La "proyección" a la que se hace referencia es una proyección vectorial . Para calcular la proyección del vector sobre el vector b , utiliza el producto interno de los dos vectores:ab

aproj=a,bb

en este caso es el componente vectorial de a que se encuentra en la misma dirección de b . En el espacio euclidiano, el operador del producto interno se define como suproducto punto:aprojab

a,b=ab=i=1naibi

donde es el número de componentes en los vectores a y b y a i y b i son el i -ésimo componente de los vectores a y b , respectivamente. Intuitivamente, al calcular el producto interno de los dos vectores, se encuentra "cuánto" del vector a va en la dirección del vector b . Tenga en cuenta que esta es una cantidad con signo, por lo que un valor negativo significaría que el ángulo entre los dos vectores es mayor que 90 grados, como lo ilustra una definición alternativa para el operador de proyección:nabaibiiabab

aproj=|a|cos(θ)b

donde es el ángulo entre los dos vectores.θ

Por lo tanto, dado un vector y un grupo de vectores de la base b i , uno puede encontrar "cuánto de un " va en cada una de las direcciones de cada uno de los vectores de la base. Típicamente, esos vectores base serán mutuamente ortogonales. En su caso, la SVD es una descomposición ortogonal, por lo que esta condición debe cumplirse. Entonces, para lograr lo que describe, tomaría la matriz de vectores propios U y calcularía el producto interno del vector candidato y con cada una de las columnas de la matriz:abiaUy

pi=yui

El valor escalar que obtiene de cada producto interno representa qué tan bien el vector y "se alineó" con el i -ésimo vector propio. Dado que los vectores propios son ortonormales , puede reconstruir el vector original y de la siguiente manera:piyiy

y=i=1npiui

Usted preguntó si esta representación es única; No estoy seguro exactamente a qué se refiere, pero no es único en el sentido de que un vector dado podría descomponerse por proyección sobre cualquier número de bases ortonormales. Los vectores propios contenidos en la matriz U son un ejemplo de ello, pero podría usar cualquier número de otros. Por ejemplo, el cálculo de la transformada discreta de Fourier de y puede verse como una proyección sobre una base ortonormal de vectores exponenciales complejos de frecuencia variable.yUy

Jason R
fuente
y
yy