R boyutsallığı azaltma nasıl yapılır


28

Bir (i, j) sayfasının kaç kez bireysel olduğumu söylediğini söyleyen bir matrisim var. 27 bin birey ve 95 bin sayfa var. Sık sık birlikte görüntülenen sayfa kümelerine karşılık gelen sayfalar alanında bir avuç "boyutlar" veya "boyutlar" istiyorum. Nihai hedefim, daha sonra bireysel olarak, boyut 1, boyut 2 vb. Sayfalara giren sayfaları ne kadar sık ​​izlediğimi hesaplayabilmektir.

Temel bileşen analizi ve tek değer ayrıştırma hakkında R belgelerini okudum ve bu komutları yürüttüm, ancak nasıl devam edeceğime emin değilim.

Bunu yapmak için boyutsallık azaltmayı nasıl kullanabilirim? Yoksa bu gerçekten bir kümeleme problemi midir ve bunun yerine kümeleme algoritmalarına bakmalı mıyım?

Herhangi bir görüş için çok teşekkürler ~ l

Yanıtlar:


10

Mat_pages [] öğesinin sütunlarda (kümelemek istediğiniz) sayfalar ve satırlardaki bireyleri içerdiğini varsayalım. Aşağıdaki komutu kullanarak sayfaları tek tek verilere göre Rby'de kümelendirebilirsiniz:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

Yükleme matrisi, verilerin SVD ayrışmasının özvektörlerinin matrisidir. Puanların hesaplanmasında her SAYF'ın nispi ağırlığını verir. Daha büyük mutlak değerlere sahip yükler, karşılık gelen prensip bileşeninin puanının belirlenmesinde daha fazla etkiye sahiptir.

Bununla birlikte, sayfaların kümelenmesi için PCA kullanmanın kısa süresine de dikkat etmem gerekir . Bunun nedeni, yüklerin aslında PAGE içeriğinden mi yoksa başka bir sebepten mi (teknik veya bireysel bir değişiklik olabilir) bağımsız olarak, PAGE'ye yüksek değişkenlik gösteren daha büyük ağırlıklar vermesidir. Yüklemeler, esas olarak ilgilendiğiniz (belki de) gruplar arasındaki gerçek farklılıkları yansıtmaz. ANCAK, bu kümelenme, tüm sayfaların aynı varyansa sahip olduğu varsayımıyla gruptaki farklılıkları yansıtıyor (bunun geçerli bir varsayım olup olmadığını bilmiyorum).

Eğer güçlü bir bilgi işlem imkanınız varsa (veri boyutunuza göre mümkün olabilir) - hiyerarşik modelleri kullanmak iyi bir fikir olabilir. R'de lme4 paketi kullanılarak yapılabilir.


Skorları aldıktan sonra ne yaparsın?

Bu kaba bir öneridir ve analiz büyük ölçüde verilerin nasıl göründüğüne bağlıdır. Ayrıca, bu işlemin sahip olduğunuz büyüklükteki verileri gruplandırmakta oldukça mümkün olacağını tahmin ediyorum.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

Umarım, bu size verinin nasıl gruplandırıldığının bir resmini verebilir.

Uyarı: bu benim önereceğim şey değil.


Benim önerim:

Bunlar gibi problemler genomiklerde sıklıkla ortaya çıkmaktadır. Davanızda sayfalarınız genlere karşılık gelir ve bireyler hastalara karşılık gelir (temelde bireyler genomiklerle aynı anlama gelir)

Sayfaları verilere göre kümelemek istiyorsunuz.

R içinde çok fazla kümeleme paketi kullanabilir ve diğer cevaplarda da belirtilmiş olabilir. Paketlerle ilgili temel bir sorun, küme sayısının nasıl belirleneceği hclust gibidir. Benim favorilerimden bazıları:

  • pvclust (eğer kümeleri verir ve ayrıca her grup için bir p değeri veren p-değeri istatistiksel olarak anlamlı kümeleri belirleyebilir kullanma.. Sorun : hesaplamalı çok fazla güç gerektirir ve verilerle çalışmak eğer emin değilim senin boyut)
  • hopach (Tahmini küme sayısını ve kümeleri verir)
  • Bioconductor'da mevcut başka paketler var, lütfen görev görünümünde kontrol edin.

K-means vb. Gibi kümeleme algılarını da kullanabilirsiniz. Bu forumda kümeleme hakkında bir konu gördüm. Cevaplar çok ayrıntılıydı. Doğru hatırlamam, Tal Galili tarafından istendi.


@ suncoolsu: çok teşekkürler! Tavsiyene uydum ve prcomp koştum. Ayrıca ürettiği yükleme matrisini de sakladım. Ancak bu matrisi sayfaları birlikte gruplamak için nasıl kullanabilirim?
laramichaels

Merhaba Laramichaels, lütfen cevabımı aşağıda bulabilirsiniz.
suncoolsu 28.09.2010

@suncoolsu: Benzer bir problemle uğraşıyorum, ancak aynı "dinamikleri" olan bireyleri "kümelemek" istiyorum (aslında her bölge için çok fazla zaman dilimim var ve onları modellemek istiyorum). Pam'i korelasyon mesafesiyle (1-rho) kullanmayı düşünüyordum. Bu önerilen bir yol mu? Lütfen keşfedilecek yollar önerebilir misiniz?
teucer

@Musa .. Biraz daha net olabilir misin? Senin bahsettiğin "dinamikleri" anladığımı sanmıyorum. Kesinlikle pam kümeleme için uygun değil. Ama aynı zamanda benden bahsettiğim gibi R paketlerini pvclust ve hopach da deneyebilirsiniz. Ayrıca, SOM (kendi kendini organize eden haritalar) kümelemeye bakmanın farklı bir yoludur. Daha fazla bilgi için lütfen Ripley ve Venable (2002) kitabına bakınız - MASS. Kitap, kümelenme hakkında kapsamlı bir muamele sunuyor.
suncoolsu

@ suncoolsu: Zayıf formülasyon için özür dilerim! Modellemek istediğim 200 zaman dilimim var (örn. Benzetim yapmak için). Sanırım "benzer" bir küme yapabilirim (yani zaman içinde aynı davranışa sahip: doğru ileri yaklaşım korelasyonu kullanmaktır) zaman çizelgelerini ve sadece küme zaman çizelgelerini taklit eder ...
teucer

4

Bu kesinlikle bir kümeleme problemidir. clusterAlgoritma seçeneklerine genel bir bakış için Rs paketine bakın ( pamve agnesen iyi seçenek; kümelemede iki ana akışı temsil eder - centroidler ve hiyerarşik ).
Verilerinizde kümelemeyi kullanmaktaki asıl sorun, sayfalar arasında iyi bir benzerlik ölçütü tanımlamak; basit olanı Manhattan mesafesini kullanmaktır; Ortak izleyicilerin sayısını saymak ve normalleştirmek için biraz daha karmaşık, diyelim ki, birinci ve ikinci sayfanın izleyici sayısı ortalaması - bu popülerlik etkilerini susturmalıdır.

(sayfa sayısı)x(sayfa sayısı)


Cevabını aştım. Ancak, son cümle içinde rapor için yeni linkler verebilir misiniz? Eski olan öldü.
discipulus

1
Sonsuza dek kaybedilmesinden korkuyorum ... Genel olarak, her birine benzerlik matrisi oluşturmayan, ancak talep üzerine nesneleri araştıran kümeleme yöntemlerinin uygulamaları ile ilgiliydi.

1

Boyutsallık azaltma temel olarak niteliklere (sütunlar) kümeleme algoritması uyguluyor. Veri kümenizin oldukça büyük boyutsallığından dolayı, bireyler veya sayfalar için bir harita oluşturmak için SOM (kendi kendini düzenleyen harita / Kohonen ağı) kullanmayı deneyebilirsiniz. Daha sonra anlamlı (yorumlanabilir) kalıplar olup olmadığını görebilirsiniz.


1

PCA yaparsanız tavsiyem, yalnızca ilk ikisinden farklı diğer bileşenleri de kısaca taramak olacaktır. prcompNesneye sahip olduktan sonra pc(suncoolsu'nun gönderisine bakın), plot(pc)farklı ana bileşenlere atfedilen varyans miktarını görebilirsiniz. Ayrıca kolayca birkaç (genellikle üç veya dört) tanesi görselleştirmek pairs(pc$x[,1:3])kullanarak veya lattice, splom(pc$x[,1:3]).

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.