PCA'dan ne elde ettiğimi nasıl yorumlayabilirim?


14

Üniversite ödevinin bir parçası olarak, oldukça büyük, çok değişkenli (> 10) bir ham veri setinde veri ön işleme yapmak zorundayım. Kelimenin hiçbir anlamında bir istatistikçi değilim, bu yüzden neler olduğu konusunda biraz kafam karıştı. Muhtemelen gülünç basit bir soru için özür dilerim - başım çeşitli cevaplara bakıp istatistik-konuşmada beklemeye çalıştıktan sonra dönüyor.

Bunu okudum:

  • PCA verilerimin boyutsallığını azaltmama izin veriyor
  • Bunu, çok fazla ilişkilendiren nitelikleri / boyutları birleştirerek / kaldırarak yapar (ve bu nedenle biraz gereksizdir)
  • Bunu kovaryans verilerinde özvektörler bularak yapar ( bunu öğrenmek için izlediğim güzel bir öğretici sayesinde )

Hangi harika.

Ancak, bunu pratik olarak verilerime nasıl uygulayabileceğimi görmek için gerçekten zorlanıyorum. Örneğin (bu , kullanacağım veri kümesi değil , insanların birlikte çalışabileceği iyi bir örnek girişim), eğer böyle bir şeyle bir veri setim olsaydı ...

PersonID     Sex     Age Range    Hours Studied     Hours Spent on TV      Test Score     Coursework Score 
1            1       2            5                 7                      60             75
2            1       3            8                 2                      70             85 
3            2       2            6                 6                      50             77
...          ...     ...          ...               ...                    ...            ...

Herhangi bir sonucu nasıl yorumlayacağımdan tam olarak emin değilim.

Çevrimiçi gördüğüm öğreticilerin çoğu bana PCA'nın matematiksel bir görünümünü veriyor gibi görünüyor. Üzerinde biraz araştırma yaptım ve onları takip ettim - ama bunun benim için ne anlama geldiğinden hala emin değilim, kim sadece önümdeki bu veri yığınından bir çeşit anlam çıkarmaya çalışıyor.

Sadece verilerimde PCA yapmak (bir istatistik paketi kullanarak) NxN sayı matrisini (burada N orijinal boyutların sayısıdır) tükürüyor, ki bu benim için tamamen yunanca.

PCA'yı nasıl yapabilirim ve elde ettiğimi daha sonra orijinal boyutlar açısından düz İngilizce'ye koyabileceğim şekilde nasıl alabilirim?


3
Örnek verileriniz veri türlerinin bir karışımını gösterir: Cinsiyet ikiliktir, Yaş sıralıdır, diğer 3 aralıktır (ve farklı birimlerde olanlar). Doğrusal PCA yapmak aralık verileri için doğrudur (ancak önce birimler nedeniyle bu değişkenleri z-standardize etmeniz gerekir). PCA'nın ikili veya ikilik veri için uygun olup olmadığı tartışmalıdır . Doğrusal PCA'da sıralı veri kullanmamalısınız. Ama örnek verilerle ana soru: neden hiç onunla PCA yapmak; bu durumda ne mantıklı olabilir?
ttnphns

Bu pdf PCA uygulaması için kullanışlıdır . Buradaki diğer gönderiler PCA sonuçlarınızın "anlamını" açıklamak için iyi bir iş çıkarıyor.
AMS

(Lütfen yanılıyorsam beni düzeltin) PCA'nın verilerdeki eğilimleri bulmaya ve hangi özelliklerin hangileri ile ilişkili olabileceğini anlamaya yardımcı olmak için çok yararlı olabileceğine inanıyorum (sonunda tahminim desenler ve benzerleri). Ödevim, bu büyük veri kümesine sahip olduğumu ve sadece kümeleme ve sınıflandırıcıları uygulamak zorunda olduğumu ve ön işlem için hayati önemde listelediği adımlardan biri PCA'dır. Bazı ikinci dereceden öznitelikleri ayıklama verisini denemek ve almak zorunda olduğum veri kümesinden ayıklamaya çalışırsam yardımcı olur mu?
nitsua

3
Size şu anda yalnızca PCA hakkında daha fazla bilgi vermenizi tavsiye edebilirim (bu sitede de). Birçok belirsizlik kesinlikle ortadan kalkacaktır.
ttnphns

Yukarıdaki birçok ince bağlantı, burada, PCA hakkında regresyon açısından iyi bir fikir verebilecek kısa bir örnek, pratik bir örnek ve hiç değilse teknik terimlerle çok az. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviathan

Yanıtlar:


15

Gönderdiğiniz öğreticinin 13-20. Sayfalarında, PCA'nın boyutsallığı azaltmak için nasıl kullanıldığına dair çok sezgisel bir geometrik açıklama sunulmaktadır.

Bahsettiğiniz 13x13 matris muhtemelen "yükleme" veya "döndürme" matrisidir (orijinal verilerinizin 13 değişkeni olduğunu tahmin ediyorum?) Bu iki (eşdeğer) yoldan biriyle yorumlanabilir:

  1. Yükleme matrisinizin () mutlak değerleri) sütunları, her bir değişkenin her bir bileşene orantılı olarak ne kadar “katkıda bulunduğunu” açıklar.

  2. Döndürme matrisi, verilerinizi döndürme matrisiniz tarafından tanımlanan temel üzerine döndürür. Dolayısıyla, 2 boyutlu verileriniz varsa ve verilerinizi rotasyon matrisinizle çarpıyorsanız, yeni X ekseniniz ilk temel bileşen ve yeni Y ekseni ikinci temel bileşen olacaktır.

EDIT: Bu soru çok sorulur, bu yüzden boyutsal azaltma için PCA kullandığımızda neler olup bittiğine dair ayrıntılı bir görsel açıklama yapacağım.

Y = x + parazitten üretilen 50 noktadan oluşan bir örnek düşünün. İlk temel bileşen, aşağıda gösterildiği gibi y = x çizgisi boyunca uzanır ve ikinci bileşen, y = -x çizgisi boyunca uzanır.

resim açıklamasını buraya girin

En-boy oranı biraz dağınık, ama bunun için bileşenlerin dik olduğunu söylüyorum. PCA uygulamak, verilerimizi döndürerek bileşenlerin x ve y eksenleri olmasını sağlar:

resim açıklamasını buraya girin

Dönüşümden önceki veriler dairelerdir, sonraki veriler çaprazdır. Bu özel örnekte, veriler y = -2x çizgisi boyunca çevrildiği kadar döndürülmemiştir, ancak burada açıklandığı gibi genelliği kaybetmeden gerçekten bir dönüş yapmak için y eksenini kolayca tersine çevirebilirdik. .

Varyans kütle, yani bilgi verileri (Verileri dönüştürülmüş sonra x-ekseni tarafından temsil edilmektedir) ilk temel bileşeni boyunca yayılır. İkinci bileşen (şimdi y ekseni) boyunca küçük bir varyans var, ancak bu bileşeni önemli miktarda bilgi kaybı olmadan tamamen bırakabiliriz . Bu yüzden bunu iki boyuttan 1'e daraltmak için, verilerin ilk temel bileşene yansıtılmasına izin vermekteyiz.

resim açıklamasını buraya girin

Orijinal verilerimizi orijinal eksenlere geri döndürerek (tamam, yansıtarak) kısmen kurtarabiliriz.

resim açıklamasını buraya girin

Koyu mavi noktalar "geri kazanılmış" verilerken, boş noktalar orijinal verilerdir. Gördüğünüz gibi, orijinal verilerden bazı bilgileri, özellikle ikinci ana bileşen yönündeki varyansı kaybettik. Ancak birçok amaç için, bu sıkıştırılmış açıklama (ilk ana bileşen boyunca projeksiyonu kullanarak) ihtiyaçlarımıza uygun olabilir.

İşte bu örneği oluşturmak için kullandığım kod, kendiniz çoğaltmak istemeniz durumunda. İkinci satırdaki parazit bileşeninin varyansını azaltırsanız, PCA dönüşümü tarafından kaybedilen veri miktarı da azalır çünkü veriler ilk ana bileşene yakınsar:

set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)

p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
arrows(x0=mean(p2$x[,1])
      ,y0=0
      ,x1=mean(p2$x[,1])
      ,y1=1
      ,col='blue'
       )
arrows(x0=mean(p2$x[,1])
       ,y0=0
       ,x1=-1.5
       ,y1=0
       ,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)


plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
  lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
for(i in 1:n){
  lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)

5
David, lütfen "dönme matrisi" (özvektörler olarak da bilinir) ve "yükleme matrisi" terimlerini birbirinin yerine kullanmayın. Saflık ve insanları aldatmamak için. PCA'daki yükler , özdeğerleriyle normalleştirildikten sonra özvektörlerdir. Teşekkür ederim.
ttnphns

3
@ttphns Tamamen hangi paketi kullandığınıza bağlı olduğunu düşünüyorum. Genellikle bu terimler tamamen değiştirilebilir. Burada "yüklemelerin" kullanımını düşünün: utdallas.edu/~herve/abdi-awPCA2010.pdf . Ayrıca prcomp, yükleme matrisinin sadece sütunları birim özvektör olan matris olduğu R fonksiyonuna da başvurunuz. Sanırım gereksiz bir teknik olduğunuzu ve çoğu durumda bu terimlerin birbirinin yerine kullanıldığını düşünüyorum.
David Marx

4
Üzgünüm, ama katılmıyorum. Sebep: Yüklemelerin PCA ve faktör analizi için anlamlı (ve aynı anlamda!) Olduğunu unutmayın. Yükler, korelasyonlar / kovaryanslar ile doğrudan karşılaştırılabilir. Özvektörler rotasyon kosinüsleridir. Faktör analizinde, bir çok yöntem (dönme ile anlaşma yok de ekstre fazı). Bu nedenle, iki terimi karıştırmak gerçekten öğrenciler için yanıltıcıdır ve bundan kaçınılmalıdır.
ttnphns

Daha küçük nokta: doğru yazım her zaman ve sadece "ilkedir", "ilke" değildir. Buna göre düzenledim, ancak düzenleyemediğim bir resim.
Nick Cox

1
Başka bir görsel burada bulunabilir setosa.io/ev/principal-component-analysis
SIslam

2

Ben senin soru değil yalnızca nitelikli bir soru olduğunu söyleyebilirim cross validatedama aynı zamanda stack overflowsütun / değişken daha iyi varyansı katkı etkili bir tespit yardımcı olması için Ar boyut azaltma nasıl uygulanacağını söylenecek nerede (.. vb.), tüm veri kümesi.

PCA (Ana Bileşen Analizi), SVD (Tekil Değer Ayrışımı) ile aynı işlevselliğe sahiptir scaleve veri kümesine / z-dönüşümü uygulandıktan sonra aslında aynı işlemdir .

Daha iyi anlaşılması için yarım saat içinde geçebileceğiniz bazı kaynaklar.

Ben svd nasıl uygulanacağını ve her bileşenin ne yaptığını anlamanıza yardımcı olmak için canlı bir kodlama çözümü veremiyorum, ancak insanlar harika, burada bile SVD'nin uygulama tarafına yetişmek için kullandığım çok bilgilendirici mesajlar var 3by3 SVD probleminin nasıl hesaplanacağını bilir .. :)

  1. Coursera Data Analysis Class - Jeff Leek: Video Ders / Ders Notları
  2. Çok Bilgilendirici bir öğrenci gönderisi
  3. Amerikan Matematik Derneği'nden bir yazı.

Jeff Leek'in sınıfı PCA ile neler yapabileceğinizi hissetmek için çok iyi. İyi olan şey, karmaşık matematiksel / istatistiksel detaylara girmemesi (diğer yerlerde bol miktarda bulunabilir), daha ziyade veri üzerinde gerçekten nasıl kullanılacağını gösteren uygulamalı bir yaklaşım sağlamasıdır.
nico

1

PCA'da verileri daha az değişkenle tanımlamak istersiniz. Aynı bilgileri, tüm değişkenlerden daha az değişkenle alabilirsiniz. Örneğin, çalışılan saatler ve test puanı ilişkilendirilebilir ve her ikisini de dahil etmek zorunda değiliz.

Örneğinizde, amacınızın bir öğrencinin / kişinin ne kadar "iyi" olduğunu ölçmek olduğunu varsayalım. Tüm bu değişkenlere bakıldığında, bunun nasıl yapılacağını görmek kafa karıştırıcı olabilir. PCA hangi öğrencilerin iyi / kötü olduğunu açıkça görmemizi sağlar.

İlk temel bileşen verilerin varyasyonlarının çoğunu açıklıyorsa, tek ihtiyacımız olan budur. Bu bileşen ile tüm değişkenler arasındaki korelasyonu bulacaksınız. "Büyük" korelasyonlar önemli değişkenleri ifade eder. Örneğin, birinci bileşen, çalışılan saatler ve test puanı ile güçlü bir şekilde ilişkilendirilebilir. Bu nedenle, birinci bileşenin yüksek değerleri, çalışma süresi ve test puanının yüksek değerlerini gösterir.

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.