Artykuł w Wikipedii na temat analizy głównych komponentów stwierdza, że
Istnieją wydajne algorytmy do obliczania SVD bez konieczności formowania macierzy , więc obliczanie SVD jest obecnie standardowym sposobem obliczania analizy głównych składników z macierzy danych, chyba że wymagana jest tylko garść składników.
Czy ktoś mógłby mi powiedzieć, o jakich skutecznych algorytmach mówi ten artykuł? Nie podano żadnego odniesienia (adres URL lub cytat do artykułu proponującego ten sposób obliczeń byłby miły).
pca
algorithms
svd
numerics
svd
źródło
źródło
Odpowiedzi:
Głównym koniem obliczeniowym przy obliczaniu SVD jest algorytm QR . Powiedziawszy, że istnieje wiele różnych algorytmów do obliczania rozkładu wartości w liczbie pojedynczej ogólnej macierzy -na- . Świetny schemat problemu dostępny tutaj (z dokumentacji MKL Intela ) jest następujący:M N A
Jak widać, w zależności od przypadku użycia istnieją różne podejścia (rutynowe konwencje nazewnictwa można znaleźć tutaj ). Jest tak, ponieważ na przykład istnieją formy matrycowe, w których redukcja Householdera może być droższa niż rotacja Givens (żeby wymienić dwa „oczywiste” sposoby uzyskania QR). Standardowym odniesieniem w tej sprawie są Matematyczne obliczenia Goluba i Van Loana (sugerowałbym użycie przynajmniej trzeciej edycji). Znalazłem też Å. Metody numeryczne Björcka dla problemów z najmniejszymi kwadratami bardzo dobre zasoby na ten temat; podczas gdy SVD nie jest głównym przedmiotem książki, pomaga kontekstualizować wykorzystanie go.
Jeśli muszę udzielić ci jednej ogólnej porady w tej sprawie , nie próbuj pisać własnych algorytmów SVD, chyba że pomyślnie ukończyłeś już kilka zajęć z Numerycznej Algebry Liniowej i wiesz, co robisz. Wiem, że zabrzmi to sprzecznie z intuicją, ale tak naprawdę jest to tona rzeczy, które mogą pójść nie tak, a ty kończysz (w najlepszym razie) nieoptymalne implementacje (jeśli nie są złe). Istnieje kilka bardzo dobrych darmowych pakietów w tej sprawie (np. Eigen , Armadillo i Trilinos, żeby wymienić tylko kilka.)
źródło
svds
) posuwają się tak daleko, że po prostu używają ich skróconej funkcji SVD jako opakowania dla ich skróconycheigs
procedur eigendecomposition ( ).