PCA'yı çok büyük seyrek matrise uygulayın


16

R ile bir metin sınıflandırma görevi yapıyorum ve 22490 120,000 (sadece 4 milyon sıfır olmayan giriş,% 1'den az giriş) boyutunda bir belge terimi matrisi elde ediyorum. Şimdi PCA (Temel Bileşen Analizi) kullanarak boyutsallığı azaltmak istiyorum. Ne yazık ki, R bu büyük matrisi işleyemiyor, bu yüzden bu seyrek matrisi "Matrix Market Formatında" bir dosyada saklayarak PCA yapmak için başka bazı teknikler kullanmayı umuyorum.

Bu yüzden herhangi biri bana bu büyük ölçekli matrisle kolaylıkla PCA yapabilen veya kendi başıma uzun elli bir PCA yapabilen, yani ilk önce kovaryans matrisini hesaplayan yararlı kütüphaneler (programlama dili ne olursa olsun) için bazı ipuçları verebilir ve daha sonra kovaryans matrisi için özdeğerleri ve özvektörleri hesaplayın .

İstediğim tüm PC'leri (120.000) hesaplamak ve sadece% 90 varyansı oluşturan en iyi N PC'leri seçmek . Açıkçası, bu durumda, çok küçük varyans değerlerini 0'a (kovaryans matrisinde) ayarlamak için bir eşik değeri vermeliyim, aksi takdirde, kovaryans matrisi seyrek olmayacak ve boyutu 120.000 x 120.000 olacaktı; tek bir makine ile idare etmek imkansız. Ayrıca, yüklemeler (özvektörler) aşırı büyük olacaktır ve seyrek formatta saklanmalıdır.

Herhangi bir yardım için çok teşekkürler!

Not: 24 GB RAM ve 8 cpu çekirdekli bir makine kullanıyorum.


Matris ne kadar seyrek? Ortaya çıkan SVD'yi nasıl kullanıyorsunuz? Sadece bir kısmına ihtiyacınız varsa, muhtemelen çok daha ucuza yaklaşabilirsiniz.
Arnold Neumaier

@ArnoldNeumaier Affedersiniz, seyrek bilgileri eklemeyi unuttum. Gönderiyi tam fikrimle birlikte güncelledim.
Ensom Hodder

Şimdiye kadar cevaplarda önerilen SLEPc, mahout ve irlba problemleriniz için uygun görünüyor.
Arnold Neumaier

1
Neden 120k'nin tamamını hesaplamak istiyorsunuz ? Görünüşe göre, varyansın% 90'ını oluşturanların hesaplanması çok daha ucuz olmalı.
Jed Brown

@JedBrown Hey Jed, tamamen haklısın! Sadece% 90 varyansı olanlarla ve ayrıca karşılık gelen özvektörlerle ilgileniyorum (daha sonra test veri kümesini dönüştürmek için). Lütfen daha ucuz yöntemlerinizi bana bildirir misiniz ?
Ensom Hodder

Yanıtlar:


4

Ben irlba paketini öneririm - svd ile hemen hemen aynı sonuçları üretir, ancak çözmek için daha az sayıda tekil değer tanımlayabilirsiniz. Netflix ödülünü çözmek için seyrek matrisler kullanarak bir örnek burada bulunabilir: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html


Yorumlarınız için teşekkürler. Aslında, bu videoyu izledim ve dün irlba paketini de denedim , ancak sadece birkaç tekil değeri hesaplamak için kullanılabileceği görülüyordu . Ancak, yazıda belirtildiği gibi, TÜM tekil değerleri (120.000) hesaplamak istiyorum , böylece hesapladıkları varyanslara göre uygun sayıda PC seçmek için. Bu durumda, sanırım irlba artık uygun değil.
Ensom Hodder

SVD sonuçlarını PCA'ya benzer şekilde kullanabilir misiniz? PCA'yı gerçekleştirmek için SVD'yi yapmadan ÖNCE verileri ortalamanız gerekmez mi?
Zach

@Zach - SVD, PCA'nın arkasındaki ana algoritmadır (bkz. Prcomp - stat.ethz.ch/R-manual/R-patched/library/stats/html/prcomp.html ). Verilerin ortalanması, PCA'ya tabi tutulmadan önce standart bir prosedürdür, ancak sorunuza bağlı olarak çok çeşitli seçenekler vardır (örneğin, farklı ölçeklendirme türleri de uygulanabilir).
Marc

Verileri SVD'den önce ortalamazsam ne kadar büyük bir anlaşma olur? Belleğe uyan seyrek bir matrisim var, ancak merkezleme onu yoğun ve belleğe sığmayacak kadar büyük yapardı.
Zach

@Zach - Gerçekten örneklerinizi birbirinizle nasıl ilişkilendirmek istediğinize bağlıdır. Bellek sınırları nedeniyle ortalanmış verilerle çalışamazsanız, sanırım karar sizin için verilmiştir. Genel olarak, merkezleme verileri PCA'nın örneklerin bir kovaryans matrisi üzerinde çalışmasını sağlarken, verilerin merkezlenmesi ve ölçeklenmesi PCA'nın bir korelasyon matrisi üzerinde çalışmasını sağlar. Bu kararlar hakkında daha fazla bilgi için stats.stackexchange.com adresinden bir soru sormayı veya PCA ile ilgili mevcut yanıtları aramayı düşünebilirsiniz .
Marc kutuda

8

Kısmi bir SVD hesaplamak için SLEPc kullanmanızı öneririm . Ayrıntılar için Kullanım Kılavuzunun 4. Bölümüne ve SVD kılavuz sayfalarına bakın.


1
PCA istediğinden SVD'yi hesaplamadan önce verileri ortalamak zorundadır. Bu, seyrekliği mahvedecektir. SLEPc'in buna uyum sağlaması için bir yol var mı?
dranxo

3
Bu sadece seyrek + düşük rütbe. SLEPc, matris girişlerine, sadece seyrek bir matris artı bir düzeltme olarak uygulanabilen doğrusal bir operatöre ihtiyaç duymaz.
Jed Brown

2

Diğer NLP / TA görevleri için de iyi olan ve harita / azaltma uygulayan filelere oy veriyorum .


Evet, haklısın, mahout tam olarak yol haritamda. Ama önceden "basit" (sanırım) tekniklerle bir prototip oluşturmayı tercih ediyorum.
Ensom Hodder

1

Literatürde birçoğu olan artımlı tekil değer ayrışmasını kullanmanızı öneririm. Örneğin:

  • Matthew Brand 1 ve 2'nin teknik raporlarını takip etmek oldukça kolay
  • Chris Baker'ın yüksek lisans tezi , yazılımı IncPACK ve daha sonra artan SVD yöntemi üzerine yazdığı makale
  • Bunch ve Nielsen bilinen en eski makaleyi yayınladı
  • Özdeğer problemleri 1 ve 2'yi güncelleme hakkında Hall tarafından hazırlanan makaleler
  • Temelde aynı şey olan Levy ve ark.'nın ardışık Karhunen-Loeve analizi

Bu yaklaşımların tümü aşağıdakilere indirgenir:

  • küçük bir veri kümesiyle başlayın
  • SVD'yi bir şekilde hesaplayın (bu adım tek bir sütun matrisi için önemsizdir)
  • bitene kadar tekrarlayın:
    • yeni veri kümesi ekle
    • yeni veri kümesinin SVD'sini hesaplamak için mevcut SVD ve güncelleme kurallarını kullanın

N-


0

Yine de R'yi kullanabilirsiniz.

Revolution RRAM'den daha büyük veri kümelerini işleyen bir R derlemesidir. İşlevi kullanın princomp.

Ayrıca, özellikle RAM'e uymayan büyük veri stili sorunları için tasarlanmış doğrusal işlevler, örneğin lojistik regresyon, kantiller vb.

"Ben akademiyim" kutusunu işaretleyerek tam özellikli Akademik sürümünü ücretsiz olarak indirebilirsiniz.

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.