Grupları ayıran PCA bileşenlerini seçme


13

Sıklıkla PCA (yüzbinlerce değişken ve düzinelerce veya yüzlerce örnek içeren omics verileri) kullanarak çok değişkenli verilerimi teşhis etmek için kullanılırdım. Veriler genellikle bazı grupları tanımlayan birkaç kategorik bağımsız değişkenle yapılan deneylerden gelir ve ilgilenen gruplar arasında bir ayrım gösterenleri bulabilmek için genellikle birkaç bileşenden geçmem gerekir. Bu tür ayrımcı bileşenleri bulmanın oldukça ilkel bir yolunu buldum ve merak ediyorum

  1. bunun ne ölçüde makul / haklı olduğu ve
  2. Bunu başarmanın daha iyi yolları olup olmadığı.

Bunun keşifçi olduğuna dikkat edin. Başkalarını ikna etmeden önce, kendimi ikna etmek istiyorum. İlgilenilen grupları açıkça ayırt eden bileşenler olduğunu görürsem (örneğin, kontrole karşı kontrol), cevapların varyansının küçük bir kısmından sorumlu olsalar bile, örneğin denetlenen makineden bir sonuçtan daha fazla güveniyorum öğrenme.

İşte yaklaşımım. R'de pca3d'den "metabo" örnek veri setini kullanacağım.

Fikir, her bir bileşenin ne kadar varyansının bağımsız değişken tarafından açıklanabileceğini değerlendirmektir. Bunun için, her bir bileşen ve kullanım için basit bir model hesaplanması R2 "en ilginç" için "en ilginç" bileşenleri sipariş için bir ölçüt olarak.

require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T ) 

# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )

İşte sonuç. Grafik, içindeki bağımsız değişken tarafından açıklanan her bileşenin varyans yüzdesini gösterir metabo[,1].

resim açıklamasını buraya girin

r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

İşte konu:

resim açıklamasını buraya girin

(Kırmızı ve yeşil kategoriler, hasta olmayan iki denek grubudur ve ayırt edilmemeleri beklenmelidir.)

Sorularımı yeniden formüle etmek için,

  1. Bu yaklaşım size mantıklı geliyor mu? Benim sorunum çok veri tarama gibi görünüyor olmasıdır. Ayrıca, sezgisel olarak bence belki tabloyu çevirmeli ve bağımsız değişkenteki varyansın hangi kısmının her değişken tarafından açıklandığını sormalıyım? Sonunda, çarkı zayıf bir şekilde yeniden icat ettiğimden (neredeyse) eminim, bu yüzden ikinci sorum
  2. Daha iyi bir şey var mı?

Bu aşamada kısmi en küçük karelere veya benzer bir şeye geçmek istemediğimi unutmayın; Sadece sınıflamam bağlamında PCA'yı teşhis etmek istiyorum.


2
İlginç sorunuz hakkında sadece iki yorum yapmak istiyorum. 1) Yaklaşımınızı kodunu göstermenin yanı sıra kelimelerle açıklayın (burada insanların mutlaka R değil çeşitli yazılımlar kullandığını unutmayın). 2) Dağılım planı, zemine diken olmadan çok ikna edici değildir. Eğer varsa da, belirli yaklaşımınız şüpheler, soru daha odaklanmış olmak için onları konuşabilmesinin ediniz.
ttnphns

1
editör: Açıklığa kavuşturmak için önce PCA yürütüyorsunuz ve daha sonra belirli bir değişken tarafından en iyi açıklanan temel bileşenleri izole etmeye mi çalışıyorsunuz? Bunları bir dağ eteğindeki arsa ile çapraz mı onaylıyorsunuz? Veri kümenizden seçtiğiniz bazı x'lerin ana bileşendeki çok fazla varyasyonu açıklaması olabilir, ancak bu ana bileşen boyunca varyans çok düşükse bunun bir şey ifade ettiğinden emin değilim.
shadowtalker

1
R2

2
to find out what share of the overall variance in the data matrix is explained by a given classificationSadece bunu bilmek istiyorsanız PCA'ya ihtiyacınız yok. Gruplar arası kareler toplamının toplam kareler toplamına oranını hesaplayın: (SStotal-SSwithin)/SStotalburada SSwithin, grup içindeki kareler toplamıdır.
ttnphns

1
PCA'yı kullanma şeklinizle ilgili herhangi bir sorun görmüyorum, ancak neden gerçekten ihtiyaç duyduğunuzu anlamıyorum. (Sadece sevdiğin için mi?) Çünkü kesin amacını göremiyorum, senin için hiçbir şey söyleyemem Is there anything better?.
ttnphns

Yanıtlar:


8

1 numaralı sorunuzun cevabı evet, çözümünüz veri taraması demektir. 2. sorunuzun cevabı evet, literatürde üstün yöntemler var.

n<<p

Bağımsız ve bağımlı değişkenlerinizi değiştirip büyük çok değişkenli ( çoklu aksine ) regresyon analizine neden olmanız dışında temel bileşenler regresyonuna benzeyen bir analiz yürütüyorsunuz . Çok değişkenli regresyon, örneklem boyutunuzun, bağımlı değişkenlerin sayısından daha büyük olmasını gerektirir; bu, örneğinizde tamamen ihlal ettiğiniz bir gereksinimdir.

Verilerinizde PCA çalıştırmayı ve sonra çok değişkenli regresyon kullanmayı gerçekten taahhüt ediyorsanız, uygun bir yöntem kullanmanız gerekir. Örneğin, MRCE ve ilgili yöntemlere bakın [1].

Ancak, yaptığınız birkaç şaşırtıcı yoruma rağmen, analizinizde şu anda sunulan her şey, nihai hedefinizin büyük bir sürekli değişkenler kümesi (metabo [, - 1]) ile tek bir kategorik değişken (metabo [ , 1]). PCA bunu başarmanın kötü bir yoludur. Yüksek boyutlu durumda bu soruna iki genel çözüm sınıfı vardır: birincisi, seyrekliği üstlenen çözümler ve bir faktör yapısı üstlenen çözümler.

Azlık temelli çözümler tipik olarak değişkenlerin sadece çok küçük bir kısmının aslında ilgili kategorik değişkenle ilişkili olduğunu varsayar ve bu küçük altkümeyi bulmaya çalışır; örneğin bkz. DALASS [2]. Faktör yapısı tabanlı yöntemler, ayrımcı değişkenlerinizin, kategorik değişkenle gerçek bir ilişkisi olan temel gizli değişkenlerin tezahürleri olduğunu varsayar. Bu yöntem sınıfının bir örneği DLDA'dır [3].

Ben olduğumu Not değil mutlaka ben verileriniz için belirtilen herhangi yöntemler önermek; uygun bir yöntem seçerken hedeflerinizi ve sorunun a priori bilgisini dikkatlice düşünmelisiniz.

[1] Rothman, Levina, Zhu (2010). Kovaryans Tahmini ile Seyrek Çok Değişkenli Regresyon. Hesaplamalı ve Grafik İstatistik Dergisi, Cilt 19, Sayı 4, Sayfa 947-962.

[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: LASSO ile ayrımcı analizde değişken seçim, Hesaplamalı İstatistik ve Veri Analizi, Cilt 51, Sayı 8, 1 Mayıs 2007, Sayfa 3718-3736.

[3] Yu, Yang (2001). Yüz tanıma uygulamasına sahip yüksek boyutlu veriler için doğrudan LDA algoritması. Örüntü Tanıma 34, 2067-2070.


2
Bu cevabı vermek için yeni bir ödül kazandım.
Ocak

1
@Ocak: Bu güzel bir cevap, ancak "doğrudan LDA" nın en iyi ihtimalle çok garip bir algoritma olduğunu belirtmek isterim , bkz. Gao ve Davis, 2005, Doğrudan LDA neden LDA'ya eşdeğer değil : "bunu gösteriyoruz. .. D-LDA genel uygulamalarda önemli bir performans sınırlaması getirebilir "diye dikkat edin.
amoeba, Reinstate Monica

@amoeba Bu alıntı için teşekkürler. Bir süredir DLDA hakkında endişelerim vardı, çünkü bileşenleri bu şekilde seçmenin bir gerekçesi yok. Hangi bileşenlerin ayrımcılık için en yararlı olduğu bilgisiyle herhangi bir soruna kolayca uyarlanabilmesine rağmen, yüz ayrımcılık sorunlarının ötesinde genelleşmesi gerekmeyen çok probleme özgü bir çözüm olarak görüyorum. Varsayılan faktör yapısıyla yüksek boyutlu ayrımcılık uygulayan her çözümün sorunları vardır ... daha iyi yaklaşımlar buldunuz mu? Burada senin fikrinle ilgileniyorum.
ahfoss

nk

4

@ahfoss sizi zaten PCA'nın sınıflandırma analogu olarak LDA'ya işaret etti. Aslında, bu iki yöntem birbiriyle ve ayrıca PLS ile ilgilidir:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

PLS, LASSO gibi bir düzenleyici olarak görülebilir ve aynı zamanda seyrek PLS de mevcuttur (bunu kullanmamış olmama rağmen: verilerim, normalliği kabul etmeyen normal PLS için daha uygundur). Farklı düzenleme yöntemleri hakkında güzel bir tartışma için, bkz . İstatistiksel Öğrenmenin Öğeleri .

np

T=X×W
L=X×B


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
LBBBL(n×k1)=X(n×p)B(p×k1)
LBBB

Pratik not: R'de çalışmanız durumunda PLS-LDA ve PCA-LDA modelleri sağlayan bir paketim var. Denemek isterseniz bana bildirin.


Veri taramadan kaçınmak için, son modelinizi (= performansını ölçün) bağımsız verilerle doğrulamanız gerekir.

Burada bağımsız, bu vakanın (hasta?) Hiçbir şekilde model uyumuna katkıda bulunmadığı anlamına gelir . Özellikle,

  • merkezleme veya standardizasyon gibi birden fazla durum içeren herhangi bir ön işleme girmedi
  • PCA / PLS / ... hesaplamasına girmedi.
  • hiperparametre kestirimi için kullanılmadı.

Yalnızca birkaç vakanız olduğu için, bir yeniden örnekleme stratejisi uygun olacaktır. Bu durumda, hiperparametrenin optimizasyonu için egzersiz verilerinizin ikinci bir iç bölünmesini önlemek için herhangi bir hiperparametreyi (PC sayısı veya PLS gizli değişkenleri veya LASSO bağlı gibi) harici bilgi ile düzeltmek en iyisidir.


Çapraz doğrulama modelleri için +1. Son derece önemli. Bununla birlikte, sorunu ayrımcılık / sınıflandırma analizine çok uygun görünse de, ayrımcılıkla ilgilenmediğini belirten OP @ Ocak'tan duymak isterim.
Ocak'ta ahfoss

K-araçlarının / PCA / vb. Aynı aileye ait olduğu iddiasına katılmıyorum. Bu, aynı model veya algoritmanın özel durumları oldukları anlamına gelir, bu doğru değildir. PCA algoritması basit bir matris hesaplamasıdır, oysa k-araçları EM algoritması ile karşılaştırmalı yinelemeli bir algoritmadır (olasılık fonksiyonu olmadığından teknik olarak doğru değildir, ancak yine de bazı açılardan faydalı bir karşılaştırma IMHO).
Ocak'ta ahfoss

1
Plsgenomics :: pls.lda fonksiyonuna mı atıfta bulunuyorsunuz? Değilse paketiniz nasıl farklı / geliştirilmiş? İlgilenen okuyuculara, PLS-LDA'nın genel olarak kullanılan ve basitçe PLS'yi kukla kodlanmış bir sonuç değişkeniyle çalıştırma tekniğinden daha üstün olduğuna dikkat çekeceğim. Bu son yaklaşım mutlaka yanlış olmasa da, kesinlikle kludgey'dir, çünkü en azından sıfırdan daha büyük veya birden fazla tahmini olasılıklar elde edebilirsiniz!
ahfoss

@ahfoss: Altta yatan model farklı algoritmalar tarafından hesaplanabileceğinden algoritmalar demek istemedim. PCA için yinelemeli (NIPALS, POWER) veya yinelemesiz (EVD, SVD) algoritmaları kullanabilirsiniz. Belki de k-ortalamaları yerine daha iyi bir terim, "örneğin k-ortalamaları sezgisel bir yaklaşım olan küme içi karelerin toplamını minimize eden küme analizi" olurdu. Şimdi vaktim yok, cevabı daha sonra inceleyeceğim ya da sohbet odasında buluşup daha iyi bir açıklama bulabiliriz.
Ocak'ta SX ile mutsuz cbeleites

1
... Teknik bir fark ben pls::plsrpls (farklı algoritmalar arasından seçim sağlar) için kullanmaktır. Ve bazen yorumlama için faydalı olan modelin çevrilmesi ve döndürülmesi için bir dizi post-proses fonksiyonum var.
Ocak'ta SX ile mutsuz cbeleites
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.