PCA, kovaryans matrisinin özvektörlerini ("temel eksenler") hesaplar ve özdeğerlerine (açıklanan varyans miktarı) göre sıralar. Merkezlenmiş veriler daha sonra ana bileşenleri ("puanlar") elde etmek için bu ana eksenlere yansıtılabilir. Boyutsallığın azaltılması amacıyla, yalnızca bir ana bileşen alt kümesi tutulabilir ve gerisi atılabilir. (Bir meslekten PCA'ya giriş için buraya bakınız .)
Let olarak , n x s , veri matrisi , n satır (veri noktası) ve p sütun (değişkenler ya da özellikler). Her satırdan ortalama vektörünü çıkardıktan sonra , merkezlenmiş veri matrisini elde ederiz . Let olmak bazılarının matris biz kullanmak istediğiniz özvektörler; bunlar genellikle en büyük özdeğerlere sahip özvektörleri olur. Daha sonra PCA projeksiyonlarının matrisi (" puanlar ") sadece tarafından verilecektir .Xçiğ, hamn × pnpX V p × k k k n x k Z = X VμXVp × kkkn × kZ = X V
Bu, aşağıdaki şekilde gösterilmektedir: ilk alt kısım bazı ortalanmış verileri ( bağlantılı dizideki animasyonlarımda kullandığım verilerle ) ve bunun ilk ana eksen üzerindeki çıkarımlarını gösterir . İkinci alt kısım sadece bu çıkıntının değerlerini gösterir; boyutluluk ikiden bire düşürüldü:
Sipariş bu ana bileşen orijinal iki değişken yeniden mümkün olarak, geri eşleyebilir boyutlarında . Gerçekten, her bir PC'nin değerleri projeksiyon için kullanılanla aynı vektöre yerleştirilmelidir; 1 ve 3 alt noktalarını karşılaştırın. Sonuç daha sonra . Yukarıdaki üçüncü alt arsada görüntülüyorum. Son rekonstrüksiyonu elde etmek için , buna ortalama vektörünü eklemeliyiz :V ⊤ X = Z V ⊤ = X V V ⊤ X ham μpV⊤X^= Z V⊤= X V V⊤X^çiğ, hamμ
PCA rekonstrüksiyonu = PC skorları igen Özvektörler⊤+ Ortalama
ile matrisinin çarpılmasıyla doğrudan birinci alt noktadan üçüncü sınıfa geçebileceğini unutmayın ; projeksiyon matrisi olarak adlandırılır . Eğer tüm özvektörler kullanılır, daha sonra birim matristir (herhangi bir boyut indirgeme gerçekleştirilir, dolayısıyla "yeniden yapılanma" mükemmel). Yalnızca bir özvektör alt kümesi kullanılırsa, kimlik değildir.V V ⊤ p V V ⊤XV V⊤pV V⊤
Bu , PC alanındaki keyfi bir nokta için çalışır ; boşluk aracılığıyla orijinal boşluğa eşlenebilir .X = z V ⊤zx^= z V⊤
Önde gelen bilgisayarların atılması (çıkarılması)
Bazen, önde gelen bilgisayarlardan birini veya birkaçını atmak (çıkarmak) ve önde gelen bilgisayarları tutmak ve geri kalanını (yukarıdaki gibi) silmek yerine geri kalanını saklamak istiyor. Bu durumda, tüm formüller tamamen aynı kalır , ancak , atmak isteyenler hariç , tüm ana eksenlerden oluşmalıdır . Başka bir deyişle, daima bir kişinin saklamak istediği bilgisayarları içermelidir.VVV
Korelasyonda PCA hakkında uyarı
PCA korelasyon matrisinde (ve kovaryans matrisinde değil) yapıldığında, ham veri sadece çıkartılarak ortalanır, ancak her sütunu standart sapma bölerek ölçeklenir . Bu durumda, orijinal veri yeniden, bir sütun ölçekli geri ihtiyacı ile ve ancak ondan sonra, ortalama vektör tekrar ekleme . μ σ i x σ i μXr a wμσbenX^σbenμ
Görüntü işleme örneği
Bu konu genellikle görüntü işleme bağlamında ortaya çıkar. Görüntü işleme literatüründeki standart görüntülerden biri olan Lenna'yı düşünün (nereden geldiğini bulmak için bağlantıları izleyin). Sol altta, bu görüntünün gri tonlamalı varyantını gösteriyorum ( burada dosya mevcut ).512 × 512
Bu gri tonlamalı görüntüyü veri matrisi . PCA üzerinde çalışıyorum ve ilk 50 ana bileşeni kullanarak hesapladım. Sonuç sağda görüntülenir.x ham X ham512 × 512Xçiğ, hamX^çiğ, ham
SVD'yi geri alma
PCA, tekil değer ayrışması (SVD) ile yakından ilişkilidir, bkz
. SVD ve PCA arasındaki ilişki. PCA gerçekleştirmek için SVD nasıl kullanılır? daha fazla ayrıntı için. Bir matrix , gibi SVD-ed ise ve biri "azaltılmış" uzayındaki noktayı temsil eden bir -boyutlu vektör seçerse ve boyutları, daha sonra geri eşlemek için , bir ile çarpmak ihtiyacı boyutları .x X = U S V ⊤ k z u k p S ⊤ 1 : k , 1 : k V ⊤ : , 1 : kn × pXX = U S V⊤kzUkpS⊤1:k,1:kV⊤:,1:k
R, Matlab, Python ve Stata örnekleri
PCA'yı Fisher Iris verileri üzerinde yapacağım ve ardından ilk iki ana bileşeni kullanarak yeniden yapacağım. PCA'yı kovaryans matrisi üzerinde yapıyorum, korelasyon matrisi üzerinde değil, yani değişkenleri burada ölçeklendirmiyorum. Ama hala ortalamayı geri eklemek zorundayım. Stata gibi bazı paketler, standart sözdizimi aracılığıyla buna dikkat eder. @StasK ve @Kodiologist'e koddaki yardımları için teşekkür ederiz.
İlk veri noktasının rekonstrüksiyonunu kontrol edeceğiz, ki:
5.1 3.5 1.4 0.2
Matlab
load fisheriris
X = meas;
mu = mean(X);
[eigenvectors, scores] = pca(X);
nComp = 2;
Xhat = scores(:,1:nComp) * eigenvectors(:,1:nComp)';
Xhat = bsxfun(@plus, Xhat, mu);
Xhat(1,:)
Çıktı:
5.083 3.5174 1.4032 0.21353
R,
X = iris[,1:4]
mu = colMeans(X)
Xpca = prcomp(X)
nComp = 2
Xhat = Xpca$x[,1:nComp] %*% t(Xpca$rotation[,1:nComp])
Xhat = scale(Xhat, center = -mu, scale = FALSE)
Xhat[1,]
Çıktı:
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.0830390 3.5174139 1.4032137 0.2135317
Çalışılan resimler için PCA görüntülerin rekonstrüksiyonu örneği de bu cevaba bakınız .
piton
import numpy as np
import sklearn.datasets, sklearn.decomposition
X = sklearn.datasets.load_iris().data
mu = np.mean(X, axis=0)
pca = sklearn.decomposition.PCA()
pca.fit(X)
nComp = 2
Xhat = np.dot(pca.transform(X)[:,:nComp], pca.components_[:nComp,:])
Xhat += mu
print(Xhat[0,])
Çıktı:
[ 5.08718247 3.51315614 1.4020428 0.21105556]
Bunun diğer dillerdeki sonuçlardan biraz farklı olduğunu unutmayın. Bunun nedeni, Python'un Iris veri setinin sürümünün hata içermesidir .
Stata
webuse iris, clear
pca sep* pet*, components(2) covariance
predict _seplen _sepwid _petlen _petwid, fit
list in 1
iris seplen sepwid petlen petwid _seplen _sepwid _petlen _petwid
setosa 5.1 3.5 1.4 0.2 5.083039 3.517414 1.403214 .2135317