SVD / PCA hesaplamasından yeni görüntüler ekleme


16

Ben wikipedia Eigenface sayfasından fikirleri çoğaltmak çalışıyorum . Bir veri matrisi temsil edilen yüz örnek görüntüden (her görüntü n uzunluğunda bir vektöre düzleştirildi , bu nedenle X , 100 x n matristir), bir SVD ayrışımı hesapladım:XnX100n

X=UΣVT

dolayısıyla:

XXT=UΣ2UT

En büyük özdeğerlerinin bir alt kümesini alarak , matrise yaklaşabilirim ( σ 1σ 2⋯ olsun ):qσ1σ2

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

Şimdi yeni bir vektör verilen bir görüntü değil temsil eder X , nasıl ağırlığının belirlenmesi do q özvektörler U iyi benim yeni imaj temsil etmek y ? Patolojik durumlar dışında, bu temsil benzersiz midir?yXqUy

Kısacası, yapmak istediğim şey (wiki sayfasından):

Bu özyüzleri şimdi hem mevcut hem de temsil etmek için kullanılabilir yeni yüzler : Biz yapabilirsiniz proje özyüzlerin üzerinde yeni (ortalama-çıkarılan) görüntü ve böylece ne kaydı ortalama yüzünden o yeni yüzü farklıdır.

Bu izdüşümü nasıl yaparım?


1
Gelecekteki okuyucular bu uygulamayı değerli bulabilirler .
Emre

Yanıtlar:


11

Adı geçen "projeksiyon" bir vektör projeksiyonudur . Vektör izdüşümünü hesaplamak için vektör üzerine b , kullanmak iç ürün iki vektörün:ab

aproj=a,bb

, bu durumda bir vektör bileşeni , bir ile aynı yönde yatmaktadır b . Öklid uzayında, iç ürün operatörünokta ürünüolarak tanımlanır:aprojab

a,b=ab=i=1naibi

burada vektörlerde bileşenlerin sayısı olan bir ve B ve bir ı ve b i edilir I vektörlerinin inci bileşeni , bir ve b sırasıyla. Sezgisel olarak, iki vektörün iç çarpımını hesaplayarak a vektörünün ne kadarının b vektörü yönünde olduğunu görürsünüz . Bunun işaretli bir miktar olduğuna dikkat edin, bu nedenle negatif bir değer, projeksiyon operatörü için alternatif bir tanımla gösterildiği gibi, iki vektör arasındaki açının 90 dereceden fazla olduğu anlamına gelir:nabaibiiabab

aproj=|a|cos(θ)b

burada iki vektör arasındaki açıdır.θ

Yani, bir vektör verilen ve taban vektörler bir demet b i , tek "ne kadar bulabilirsiniz bir " taban vektörlerinin her birinin yönlerinin her birinde gider. Tipik olarak, bu temel vektörlerin hepsi karşılıklı olarak dik olacaktır. Sizin durumunuzda, SVD dik bir ayrışmadır, bu nedenle bu durum yerine getirilmelidir. Yani, tarif ettiğiniz şeyi başarmak için, özvektörler U matrisini alır ve matrisin sütunlarının her biriyle y aday vektörünün iç çarpımını hesaplarsınız :abiaUy

pi=yui

Sayıl değer , her bir iç üründen olsun vektör ne kadar iyi temsil y ile "dizilmiş" i 'inci özvektörler. Özvektörler ortonormal olduğundan , orijinal vektör y'yi aşağıdaki gibi yeniden yapılandırabilirsiniz :piyiy

y=i=1npiui

yUy


y

yybir dizi dikey olmayan vektör üzerine, eğer vektörler tarafından yayılan alanın daha az altta yatan boyutsallığı (daha küçük bir temel) varsa, muhtemelen daha kompakt bir gösterim elde edebilirsiniz.
Jason R
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.