Wykonuję zadanie klasyfikacji tekstu za pomocą R i otrzymuję macierz dokumentu o rozmiarze 22490 na 120 000 (tylko 4 miliony niezerowych wpisów, mniej niż 1% wpisów). Teraz chcę zmniejszyć wymiarowość, korzystając z PCA (Principal Component Analysis). Niestety R nie jest w stanie poradzić sobie z tą ogromną matrycą, dlatego przechowuję tę rzadką macierz w pliku w „Matrix Market Format”, mając nadzieję na użycie innych technik do wykonania PCA.
Czy ktoś mógłby mi więc podpowiedzieć przydatne biblioteki (bez względu na język programowania), które z łatwością mogłyby wykonać PCA na tej wielkoskalowej matrycy, lub samodzielnie wykonać PCA na długo, innymi słowy, najpierw obliczyć macierz kowariancji i następnie obliczyć wartości własne i wektory własne dla macierzy kowariancji .
Chcę obliczyć wszystkie komputery (120 000) i wybrać tylko najlepsze N komputerów, które odpowiadają za 90% wariancji . Oczywiście w tym przypadku muszę z góry ustalić próg, aby ustawić niektóre bardzo małe wartości wariancji na 0 (w macierzy kowariancji), w przeciwnym razie macierz kowariancji nie będzie rzadka, a jej rozmiar wyniesie 120 000 x 120 000, czyli niemożliwe do obsługi za pomocą jednej maszyny. Ponadto ładunki (wektory własne) będą bardzo duże i powinny być przechowywane w formacie rzadkim.
Bardzo dziękuję za wszelką pomoc!
Uwaga: używam maszyny z 24 GB pamięci RAM i 8 rdzeniami procesora.
źródło
Odpowiedzi:
Sugeruję pakiet irlba - daje on praktycznie takie same wyniki jak svd, ale możesz zdefiniować mniejszą liczbę pojedynczych wartości do rozwiązania. Przykład wykorzystania rzadkich matryc do rozwiązania nagrody Netflix można znaleźć tutaj: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html
źródło
Sugeruję użycie SLEPc do obliczenia częściowego SVD. Szczegółowe informacje można znaleźć w rozdziale 4 instrukcji obsługi i stronach podręcznika SVD .
źródło
Głosuję na Mahouta, który jest również dobry dla innych zadań NLP / TA i implementuje mapowanie / zmniejszanie.
źródło
Sugerowałbym zastosowanie przyrostowego rozkładu wartości osobliwych, których jest wiele w literaturze. Na przykład:
Wszystkie te podejścia ograniczają się do:
W swojej aplikacji, jeśli masz pojęcie o tym, gdzie znajduje się próg wartości osobliwej na szczycieN. wartości będą, możesz użyć tej wartości do obliczenia obciętego SVD; jeśli wartość progowa jest wystarczająco mała, wówczas matryca, którą musisz zachować w pamięci, również będzie mała (zostaną zachowane tylko wartości w liczbie pojedynczej powyżej wartości progowej, wraz z ich wektorami w liczbie pojedynczej; nie jest nawet konieczne utrzymanie zarówno lewej, jak i prawej liczby pojedynczej wektory w algorytmie Branda).
źródło
Nadal możesz używać R.
Revolution R
to kompilacja R, która obsługuje zestawy danych większe niż pamięć RAM. Użyj funkcjiprincomp
.Posiada również pełen zakres funkcji statystycznych zaprojektowanych specjalnie dla problemów w stylu dużych danych, które nie pasują do pamięci RAM, np. Regresja liniowa, regresja logistyczna, kwantyle itp.
Możesz bezpłatnie pobrać w pełni funkcjonalną wersję akademicką, zaznaczając pole „Jestem akademikiem”.
źródło