Yüksek boyutlu veriler için en hızlı PCA algoritması


11

Her biri yaklaşık 10.000 özellik gösteren, yaklaşık 40.000 örnekten oluşan bir veri kümesi üzerinde bir PCA gerçekleştirmek istiyorum.

Matlab princomp işlevini sürekli olarak kullanmak yarım saatten fazla sürüyor ve bu noktada süreci öldürüyorum. 10 dakikadan daha kısa sürede çalışan bir uygulama / algoritma bulmak istiyorum. En hızlı algoritma ne olurdu? Bir i7 çift çekirdekli / 4GB Ram ne kadar sürer?


Evet, haklısın, daha kesin olmalıyım. Yarım saatten fazla sürüyor, sonra süreci öldürmeye karar verdim. Bunu en az on kez yapmak zorundayım, 10 dakikadan daha kısa sürede çalışan bir şeye sahip olmak güzel olur mu
tatlı

Matrisiniz ne kadar seyrek?
Arnold Neumaier

Matris içinde sıfır yüzdesi% 80 üzerindedir
yumuşatman

Çekirdek PCA'yı da kontrol edin.
meawoppl

Yanıtlar:


11

Her şeyden önce, tüm bileşenleri mi yoksa en önemli bileşenleri mi istediğinizi belirtmelisiniz?

ARN×MNM

CRM×MO(NM2)O(M3)O(2M2)1.5A

AA

C


2

Sanırım sadece birkaç (ya da birkaç yüz) baskın tekil değer / vektör çiftine ihtiyacınız var. O zaman çok daha hızlı olacak ve çok daha az bellek tüketecek yinelemeli bir yöntem kullanmak en iyisidir.

Matlab'da, bkz.

svds yardım


Evet, sadece ilk yüz bileşene ihtiyacım olursa yinelemeli yöntemlerin çok daha hızlı olduğu görülüyor.
yumuşatman

SVD'lere gelince, matrisimi seyrek bir biçime sokmaya ve svd yerine svds koymak için princomp işlevini değiştirmeye çalıştım ve sürprizim 2000 * 4000 matris (15s yerine 180 s) üzerinde çok daha uzun sürdü ). Tuhaf ...
yumuşak

1
Seyrek formata geçmeye gerek yoktur. Ayrıca, hesaplamak istediğiniz tekil vektörlerin sayısını azaltmanız gerekir. Fiull svd'nin hesaplanması için svds uygun değildir.
Arnold Neumaier

2
Ayrıca baskın modlar için de not edin, stanford.edu/group/mmds/slides2010/Martinsson.pdf
Nick Alger


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.