PCA nasıl tersine çevrilir ve orijinal değişkenler çeşitli temel bileşenlerden nasıl yeniden oluşturulur?


113

Boyutsallığın azaltılması için ana bileşen analizi (PCA) kullanılabilir. Böyle bir boyutluluk azaltma gerçekleştirildikten sonra, orijinal değişkenler / özellikler az sayıda temel bileşenden yaklaşık olarak nasıl yeniden yapılandırılabilir?

Alternatif olarak, birkaç temel bileşen veriden nasıl çıkarılabilir veya atılabilir?

Başka bir deyişle, PCA nasıl tersine çevrilir?


PCA'nın tekil değer ayrışması (SVD) ile yakından ilgili olduğu göz önüne alındığında, aynı soru şu şekilde sorulabilir: SVD nasıl tersine çevrilir?


10
Bu soru-cevap konusunu gönderiyorum, çünkü bu konuyu soran ve bunları kopya olarak kapatamadığım için onlarca soru sormaktan yoruldum çünkü bu konuda kanonik bir konuya sahip değiliz. İyi cevaplara sahip birkaç benzer konu var, ancak hepsinin, yalnızca R'ye odaklanmak gibi ciddi kısıtlamaları var gibi görünüyor
amoeba

4
Çabalarını takdir ediyorum - PCA, ne yaptığı, ne yapmadığı hakkında bir veya birkaç yüksek kaliteli iş parçacığı hakkında bilgi toplamak için bir zorunluluk olduğunu düşünüyorum. Bunu yapmak için kendinize verdiğinize sevindim!
Sycorax

1
Bu kanonik cevabın "temizleme" nin amacına hizmet ettiğine ikna olmadım. Burada sahip olduğumuz mükemmel, genel bir soru ve cevaptır, ancak soruların her birinin burada kaybedilen pratikte PCA hakkında bazı incelikleri vardı. Temel olarak, tüm soruları aldınız, PCA'yı yaptınız ve bazen zengin ve önemli ayrıntıların saklandığı alt ana bileşenleri atdınız. Ayrıca, R. olduğu yerine gündelik istatistikçilerden ortak dil kullanmak yerine, birçok kişiye PCA opak yapar tam ne Lineer Cebir gösterimi, ders kitabı döndürülür var
Thomas Browne

1
@Thomas Teşekkürler. Bence bir anlaşmazlığımız var, sohbette ya da Meta'da tartışmaktan mutluyuz . Çok kısaca: (1) Her soruya ayrı ayrı cevap vermek gerçekten daha iyi olabilir, ancak katı gerçek şu ki olmadı. Pek çok soru sadece, muhtemelen sizin gibi, cevapsız kalıyor. (2) Buradaki topluluk, birçok insan için faydalı olan genel cevapları şiddetle tercih eder; En çok ne tür cevapların alındığına bakabilirsiniz. (3) Matematik hakkında hemfikir olun, ancak bu yüzden burada R kodu verdim! (4) lingua franca'ya katılmıyorum; şahsen, ben R. bilmiyorum
amip

@ amoeba Korkarım ki daha önce meta tartışmalara hiç katılmadığım için söylenen sohbeti nasıl bulacağımı bilmiyorum.
Thomas Browne

Yanıtlar:


147

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 .Xrawn×pnpX V p × k k k n x k Z = X VμXVp×kkkn×kZ=XV

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ü:

görüntü tanımını buraya girin

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 :VX = Z V = X V VX ham μpVX^=ZV=XVVX^rawμ

PCA reconstruction=PC scoresEigenvectors+Mean

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 VXVVpVV

Bu , PC alanındaki keyfi bir nokta için çalışır ; boşluk aracılığıyla orijinal boşluğa eşlenebilir .X = z Vzx^=zV

Ö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 μXrawμσiX^σiμ


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

Lenna görüntünün iki gri tonlamalı sürümü.  Sağdaki grenli ama kesinlikle tanınabilir.

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×512XrawX^raw


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=USVkzUkpS1: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  

1
MATLAB'da mu standart PCA çıkışlarından elde edebilir ve ayrıca girdilerdeki bileşenlerin sayısını da sağlayabilirsiniz.
Aksakal

2
μnComp

3
O sevimli kızın imajı ve imajı işleme gibi soruya doğrudan cevap ile ilgili olmayan cevaptan her şeyi çıkarırdım. Birisi görüntülerle ilgilenmiyorsa tüketimi zorlaştırır. Kimin soruyu sorduğunu çoktan karıştığını unutmayın.
Aksakal

5
Lenna, standart olarak, iris olduğu gibi ayarlanan bir veridir.
StasK

2
@ amoeba Sınırdaki boyut, bit derinliği ve hatta siyah piksellerden bahsediyordum. Kesin bir sürümüne sahip değilim http://www.ece.rice.edu/~wakin/images/ : "Lena (aka" Lenna ") test görüntüsünün birçok sürümü mevcut gibi görünüyor. Bu sorun Shapiro tarafından belirtildi. 1993 sıfır gazetesinde ve bugün şaşırtıcı bir şekilde doğru kalmaya devam ediyor "
Laurent Duval
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.