Najszybszy algorytm PCA dla danych wielowymiarowych


11

Chciałbym wykonać PCA na zestawie danych złożonym z około 40 000 próbek, z których każda zawiera około 10 000 funkcji.

Używanie funkcji princomp Matlaba konsekwentnie zajmuje ponad pół godziny, w którym to momencie zabijam proces. Chciałbym znaleźć implementację / algorytm, który działa w mniej niż 10 minut. Jaki byłby najszybszy algorytm? Jak długo potrwa na i7 dual core / 4GB Ram?


Tak, masz rację, powinienem być bardziej precyzyjny. Zajmuje to ponad pół godziny, potem zdecydowałem się zabić proces. Muszę to zrobić co najmniej dziesięć razy, czy byłoby miło mieć coś, co działa w mniej niż 10 minut
łagodny

Jak rzadka jest twoja matryca?
Arnold Neumaier,

Procent zer w matrycy jest wyższy niż 80%
łagodny

Sprawdź także kernal-PCA.
meawoppl,

Odpowiedzi:


11

Przede wszystkim powinieneś określić, czy chcesz wszystkie komponenty, czy te najbardziej znaczące?

ARN×MNM

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

AA

C


2

Myślę, że potrzebujesz tylko kilku (lub kilkuset) dominujących pojedynczych par wartość / wektor. Następnie najlepiej zastosować metodę iteracyjną, która będzie znacznie szybsza i zużyje znacznie mniej pamięci.

W Matlabie patrz

pomoc svds


Tak, wydaje się, że metody iteracyjne są znacznie szybsze, jeśli potrzebuję tylko pierwszych stu składników.
łagodny

Jeśli chodzi o svds, próbowałem umieścić moją macierz w rzadkim formacie i zmodyfikować funkcję princomp, aby wstawić svds zamiast svd, i ku mojemu zaskoczeniu zajęło to znacznie więcej czasu na matrycy 2000 * 4000 (180 s zamiast 15 s ). Dziwne ...
łagodny

1
Nie ma potrzeby przechodzenia na format rzadki. Ponadto musisz zmniejszyć liczbę pojedynczych wektorów, które chcesz obliczyć. Do obliczenia pełnego dysku svds nie nadaje się svds.
Arnold Neumaier,

2
W przypadku dominujących trybów również godne uwagi są nowsze randomizowane metody svd, jak w stanford.edu/group/mmds/slides2010/Martinsson.pdf
Nick Alger


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.