Estou tentando replicar as idéias da página Eigenface na wikipedia. De centenas de imagens de amostra representadas por uma matriz de dados (onde cada imagem é achatada para um vetor de comprimento n , portanto X é uma matriz de 100 por n ), calculei uma decomposição SVD:
conseqüentemente:
Ao pegar um subconjunto dos maiores modos próprios, posso aproximar a matriz (deixe σ 1 ≥ σ 2 ≥ ⋯ ):
Agora, dado um novo vetor , que representa uma imagem que não está em X , como determino a ponderação dos q autovetores U para melhor representar minha nova imagem y ? Exceto nos casos patológicos, essa representação é única?
Em resumo, o que eu gostaria de fazer é isso (na página da wiki):
Esses autofaces agora podem ser usadas para representar faces novas e existentes : podemos projetar uma nova imagem (subtraída pela média) nas autofaces e, assim, registrar como essa nova face difere da face média.
Como faço essa projeção?
Respostas:
A "projeção" a que se refere é uma projeção vetorial . Para calcular a projeção do vetor no vetor b , use o produto interno dos dois vetores:uma b
, nesse caso, é o componente vetorial de a que se encontra na mesma direção de b . No espaço euclidiano, o operador interno do produto é definido como seuproduto escalar:aproj a b
onde é o número de componentes nos vectores de um e B e um i e b i são o i componente -ésimo de vectores de um e b , respectivamente. Intuitivamente, calculando o produto interno dos dois vetores, você encontra "quanto de" o vetor a vai na direção do vetor b . Observe que essa é uma quantidade assinada; portanto, um valor negativo significaria que o ângulo entre os dois vetores é maior que 90 graus, conforme ilustrado por uma definição alternativa para o operador de projeção:n a b ai bi i a b a b
onde é o ângulo entre os dois vetores.θ
Assim, dado um vetor e um conjunto de vetores de base b i , pode-se encontrar "quanto de a " vai em cada uma das direções de cada um dos vetores de base. Normalmente, esses vetores de base serão todos mutuamente ortogonais. No seu caso, o SVD é uma decomposição ortogonal, portanto, essa condição deve ser satisfeita. Portanto, para realizar o que você descreve, você deve pegar a matriz dos vetores próprios U e calcular o produto interno do vetor candidato y com cada uma das colunas da matriz:a bi a U y
O valor escalar que você recebe de cada produto interno representa o quão bem o vector y "alinhados" com o i -ésimo eigenvector. Como os autovetores são ortonormais , você pode reconstruir o vetor original y da seguinte maneira:pi y i y
Você perguntou se essa representação é única; Não sei exatamente o que você quer dizer, mas não é exclusivo no sentido de que um determinado vetor possa ser decomposto por projeção em qualquer número de bases ortonormais. Os vetores próprios contidos na matriz U são um exemplo, mas você pode usar qualquer número de outros. Por exemplo, calcular a transformada de Fourier discreta de y pode ser vista como projetando-a em uma base ortonormal de vetores exponenciais complexos de frequência variável.y U y
fonte