Tüm değişkenlerin yaklaşık olarak dikey olduğu bir veri kümesinin boyutsal azalmasında herhangi bir değer var mı?


Yanıtlar:


8

@ Peter-Flom'un cevabı altında bıraktığım bir yorumu açıklığa kavuşturmak istedim ama muhtemelen bir cevapta yazmaya değer. Neredeyse dikey verilerde PCA çalıştırarak boyutları ne ölçüde azaltabilirsiniz? Cevap, PCA'yı korelasyon veya kovaryans matrisi üzerinde gerçekleştirip gerçekleştirmediğinize bağlıdır .

Korelasyon matrisinde PCA kullanıyorsanız, bu sadece kimlik matrisinden biraz farklı olacağından, tüm yönleri "eşit derecede bilgilendirici" hale getiren küresel bir simetri vardır. Değişkenlerinizin varyanslarını PCA öncesi bire yeniden ölçeklendirmek, aynı sonucu üretecek matematiksel olarak eşdeğer bir yaklaşımdır. PCA çıktısı, diğerlerinden biraz daha düşük varyansa sahip bazı bileşenleri tanımlasa da, bu (popülasyonda sıfır korelasyon varsayarsak), örnekteki şans varyasyonundan başka bir şeye atfedilebilir, bu nedenle bunları karıştırmak için iyi bir neden olmaz bileşenler. Aslında, bileşenlerin standart sapmaları arasındaki bu eşitsizlik, örneklem boyutunu artırdığımız için büyüklükte azalmalıdır. Bunu bir simülasyonda doğrulayabiliriz.

set.seed(123)
princompn <- function(n, sd1=1, sd2=1, sd3=1, sd4=1, cor=TRUE) {
    x1 <- rnorm(n, mean=0, sd=sd1)
    x2 <- rnorm(n, mean=0, sd=sd2)
    x3 <- rnorm(n, mean=0, sd=sd3)
    x4 <- rnorm(n, mean=0, sd=sd4)
    prcomp(cbind(x1,x2,x3,x4), scale.=cor)
}

Çıktı:

> pc100 <- princompn(100)
> summary(pc100)
Importance of components:
                          PC1    PC2    PC3    PC4
Standard deviation     1.0736 1.0243 0.9762 0.9193
Proportion of Variance 0.2882 0.2623 0.2382 0.2113
Cumulative Proportion  0.2882 0.5505 0.7887 1.0000
> 
> pc1m <- princompn(1e6)
> summary(pc1m)
Importance of components:
                          PC1    PC2    PC3    PC4
Standard deviation     1.0008 1.0004 0.9998 0.9990
Proportion of Variance 0.2504 0.2502 0.2499 0.2495
Cumulative Proportion  0.2504 0.5006 0.7505 1.0000

Bununla birlikte, korelasyon matrisi yerine kovaryans matrisini kullanarak PCA yaparsanız (eşdeğer olarak: PCA'yı uygulamadan önce standart sapmaları 1'e ölçeklemezsek), cevap değişkenlerinizin yayılmasına bağlıdır. Değişkenleriniz aynı varyansa sahipse, yine de küresel simetriye sahibiz, bu nedenle "ayrıcalıklı yön" yoktur ve boyutsal azalma sağlanamaz.

> pcEqual <- princompn(n=1e6, sd1=4, sd2=4, sd3=4, sd4=4, cor=FALSE)
> summary(pcEqual)
Importance of components:
                          PC1    PC2    PC3    PC4
Standard deviation     4.0056 4.0010 3.9986 3.9936
Proportion of Variance 0.2507 0.2502 0.2499 0.2492
Cumulative Proportion  0.2507 0.5009 0.7508 1.0000

Bununla birlikte, yüksek ve düşük varyans değişkenlerinin bir karışımıyla, simetri daha çok bazı geniş eksenlere ve diğerlerinin inceltildiği bir elipsoide benzer. Bu durumda, yüksek varyans değişkenlerine (elipsoidin geniş olduğu yerde) yüklenen yüksek varyans bileşenleri ve düşük varyans değişkenlerine (elipsoidin dar olduğu yönlerde) yüklenen düşük varyans bileşenleri olacaktır.

> pcHiLo <- princompn(n=1e6, sd1=4, sd2=4, sd3=1, sd4=1, cor=FALSE)
> summary(pcHiLo)
Importance of components:
                          PC1    PC2    PC3     PC4
Standard deviation     4.0018 3.9985 1.0016 1.00005
Proportion of Variance 0.4709 0.4702 0.0295 0.02941
Cumulative Proportion  0.4709 0.9411 0.9706 1.00000
> round(pcHiLo$rotation, 3)
      PC1   PC2    PC3    PC4
x1  0.460 0.888  0.000  0.000
x2 -0.888 0.460  0.000  0.000
x3  0.000 0.000 -0.747 -0.664
x4  0.000 0.000  0.664 -0.747

Değişkenler çok farklı varyanslara sahipse (geometrik olarak tekrar bir elipsoid ancak tüm eksenler farklıdır), o zaman diklik, ilk PC'nin en yüksek varyans değişkenine çok fazla yüklenmesini sağlar ve bu şekilde devam eder.

> pc1234 <-  princompn(n=1e6, sd1=1, sd2=2, sd3=3, sd4=4, cor=FALSE)
> summary(pc1234)
Importance of components:
                          PC1    PC2    PC3     PC4
Standard deviation     3.9981 3.0031 1.9993 1.00033
Proportion of Variance 0.5328 0.3006 0.1332 0.03335
Cumulative Proportion  0.5328 0.8334 0.9667 1.00000
> round(pc1234$rotation, 3)
     PC1    PC2    PC3   PC4
x1 0.000  0.000 -0.001 1.000
x2 0.001 -0.001  1.000 0.001
x3 0.003 -1.000 -0.001 0.000
x4 1.000  0.003 -0.001 0.000

Son iki durumda, boyutsal indirgeme elde etmek için atmayı düşünebileceğiniz düşük varyans bileşenleri vardı, ancak bunu yapmak, ilk etapta en düşük varyans değişkenlerini atmakla tamamen eşdeğerdir . Esas olarak, diklik, düşük varyans değişkenlerine sahip düşük varyans bileşenlerini tanımlamanıza izin verir, bu nedenle boyutsallığı bu şekilde azaltmayı düşünüyorsanız, bunu yapmak için PCA kullanmanın fayda sağlayacağı açık değildir.

Notlar: Değişkenlerin birim varyansına yeniden ölçeklendirilmediği durumu tartışmak için harcanan süre - yani korelasyon matrisi yerine kovaryans kullanmak - bu yaklaşımın bir şekilde daha önemli olduğunu ve kesinlikle bunun bir göstergesi olmadığını göstermemelidir. daha iyi". Durumun simetrisi daha ince ve dolayısıyla daha uzun tartışma gerektiriyor.


Cevabım belki de en iyi soruyu orijinal posterin (PCA'nın neler başarabileceği veya yapamayacağı ile ilgili) ortaya koyduğu gibi, yeşil kene açıkladığını varsayıyorum! Ancak okuyucuları, alternatif çözümler sunan @ RyanBressler'in cevabına bakmaya çağırıyorum .
Silverfish

11

Yerel olarak doğrusal gömme, laplacian eigenmaps veya t-SNE gibi daha genel doğrusal olmayan boyutsallık azaltma manifoldu öğrenme yöntemini deneyebilirsiniz.

Verilerinizde N temelli boyutlar arasında 0 korelasyon bırakacak şekilde daha düşük boyutlu bir altuzay (manifold) olması mükemmel bir şekilde mümkündür. Örneğin, burada görüldüğü gibi başlangıç ​​noktası veya dalga formu hakkında bir nokta daire . PCA bunu almayacak, ancak diğer yöntemler alacaktır.

Bu tür yöntemlere bakmak, görselleştirme ve keşifsel veri analizi için özellikle ilginç ve yaygındır. Bir sınıflandırıcıda veya başka bir modelde kullanmak için, kendinizi eğitime uygun ve bu yöntemlerin çoğunu hariç tutan teste uygulanabilecek yöntemlerle sınırlamanız gerekir. Bu sizin ana ilginizse, denetimsiz ön eğitim ve (denetimli) özellik mühendisliği yöntemlerine de bakmalısınız.


6

Tüm N değişkenleri kabaca dikey ise, boyut küçültme nispeten daha az küçülme yapar. Örn.R

set.seed(123)
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
x4 <- rnorm(100)
x5 <- rnorm(100)
x6 <- rnorm(100)
x7 <- rnorm(100)
x8 <- rnorm(100)
x9 <- rnorm(100)
x10 <- rnorm(100)

df1 <- cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)

pcsol <- princomp(df1)
loadings(pcsol)

Özünde, "dik" zaten "en küçük boyutunda" anlamına gelir.


2
"Orthongonal" küçük bir yazım hatası var
Silverfish

6
@Silverfish, orthon "kırmızımsı kahverengi ayakkabılar giyen uzun sarı saçlı ve tabaklanmış deri ile orta boy bir insansı". Doğru olsanız da Peter farklı demekti.
ttnphns

4
Bu cevabın değişkenlerin nasıl ölçeklendiğine bağlı olduğunu belirtmeye değer mi? Orada yüksek ve düşük varyans değişkenlerdir ve biz kovaryans değil korelasyon matrisi üzerinde PCA yaparsanız, o zaman orada olacak bırakılabilir düşük varyans bileşenleri olmak (diklik sadece kendi yüklemeleri ağır bir düşük varyans değişkeni her ile onları tanımlamak anlamına gelir). Aşağıdaki küçük değişiklikleri yapın: x1<-rnorm(100, sd=0.1)ve pcsol <- princomp(df1, cor=FALSE)özellikle de bakarsak, bir fark var summary(pcsol). (Cov'un cor'dan daha iyi bir yaklaşım olduğunu söylemiyorum, sadece mümkün.)
Silverfish

Yazım hatasını düzelttim, teşekkürler. Ayrıca, ölçekleme hakkında iyi bir nokta.
Peter Flom

2
Bu yalnızca kovaryansa dayanan boyut küçültme için geçerli değil mi? Diyelim ki, neden çok boyutlu ölçekleme burada herhangi bir azalma yapmıyor?
shadowtalker
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.