Dopasowanie nowych obrazów z obliczeń SVD / PCA

16

Próbuję powielić pomysły ze strony Eigenface na wikipedii. Ze stu przykładowych obrazów reprezentowanych przez macierz danych (gdzie każdy obraz jest spłaszczony do wektora o długości n , więc X jest 100 na nXnX100n macierzą ), obliczyłem rozkład SVD:

X=UΣVT

W związku z tym:

XXT=UΣ2UT

Biorąc podzbiór największych trybów własnych, mogę aproksymować macierz (niech σ 1σ 2 ):qσ1σ2

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

Teraz otrzymuje nowy wektor , która reprezentuje obraz nie w X , jak mogę określić ważenie q wektorów własnych U do najlepiej reprezentować mój nowy obraz y ? Czy z wyjątkiem przypadków patologicznych ta reprezentacja jest unikalna?yXqUy

Krótko mówiąc, chciałbym to zrobić (ze strony wiki):

Te twarze własne mogą teraz służyć do reprezentowania zarówno istniejących, jak i nowych twarzy : możemy projektować nowy (średnio-odejmowane) obrazu na eigenfaces a tym samym nagrać jak to nowych twarzy różni się od średniej twarzy.

Jak wykonać tę projekcję?

Haczykowaty
źródło
1
Przyszli czytelnicy mogą uznać implementację za wartościową.
Emre

Odpowiedzi:

11

„Projekcja”, o której mowa, jest projekcją wektorową . Aby obliczyć rzut wektora na wektor b , użyj iloczynu wewnętrznego dwóch wektorów:ab

aproj=a,bb

w tym przypadku jest elementem wektora, która leży w tym samym kierunku Baprojab . W przestrzeni euklidesowej wewnętrzny operator produktu jest zdefiniowany jako ich iloczyn iloczynu :

a,b=ab=i=1naibi

gdzie jest liczbą składników w wektorach i b i ı a b Ii -ty składnik wektorów a i b , odpowiednio. Intuicyjnie, obliczając iloczyn wewnętrzny dwóch wektorów, znajdujesz „ile” wektora a idzie w kierunku wektora b . Zauważ, że jest to liczba ze znakiem, więc wartość ujemna oznaczałaby, że kąt między dwoma wektorami jest większy niż 90 stopni, co ilustruje alternatywna definicja dla operatora rzutowania:nabaibiiabab

aproj=|a|cos(θ)b

gdzie jest kątem między dwoma wektorami.θ

Tak więc, biorąc pod uwagę to wektor i kilka wektorów bazowych b I , można znaleźć „ile ” idzie w każdym z kierunków każdy z wektorów bazowych. Zazwyczaj wszystkie te wektory bazowe będą wzajemnie prostopadłe. W twoim przypadku SVD jest rozkładem ortogonalnym, więc ten warunek powinien być spełniony. Tak więc, aby osiągnąć to, co opisujesz, wziąłbyś macierz wektorów własnych U i obliczysz iloczyn wewnętrzny wektora kandydującego y dla każdej z kolumn macierzy:abiaUy

pi=yui

Wartość skalarna , którą otrzymujesz z każdego produktu wewnętrznego, pokazuje, jak dobrze wektor y „zrównał się” z i-tym wektorem własnym. Ponieważ wektory własne są ortonormalne , możesz następnie zrekonstruować oryginalny wektor y w następujący sposób:piyiy

y=i=1npiui

Zapytałeś, czy ta reprezentacja jest unikalna; Nie jestem do końca pewien, co masz na myśli, ale nie jest to unikalne w tym sensie, że dany wektor mógłby zostać rozłożony przez rzut na dowolną liczbę zasad ortonormalnych. Wektory własne zawarte w macierzy U są jednym z takich przykładów, ale można użyć dowolnej liczby innych. Na przykład, obliczenia dyskretnej transformaty Fouriera z Y może być postrzegane jako wystający, a na jego podstawie ortonormalnych wykładniczej o wartościach zespolonych wektorów o różnej częstotliwości.yUy

Jason R.
źródło
Świetna odpowiedź dzięki! Przez „unikalny” miałem na myśli unikalny w sensie podanym przez SVD. Zgaduję, że biorąc pod uwagę to Baza Ortonormalna, wówczas obliczyć muszą być unikalne - ale jeśli nie jest podstawą ortonormalna to nie może być (ponieważ jeżeli nie były one prostopadłe, a następnie mogliśmy znaleźć mniejszą Podstawa zestawu)? y
Hooked
yy