Czy istnieje skrócony algorytm SVD, który oblicza wartości osobliwe pojedynczo?
Mój problem: chciałbym obliczyć pierwsze wartości pojedynczych (i wektorów pojedynczych) dużej gęstej macierzy , ale nie wiem, jaka byłaby odpowiednia wartość . jest duży, więc ze względu na wydajność wolałbym nie oceniać pełnego SVD tylko po to, aby później obciąć najmniejsze SV.M k M
Idealnie byłoby sposób na obliczenie wartości pojedynczych szeregowo, od największej ( ) do najmniejszej ( ). W ten sposób mógłbym po prostu zatrzymać obliczenia po obliczeniu tej liczby pojedynczej, jeśli spadnie poniżej pewnego progu.σ 1 σ n k σ k / σ 1
Czy taki algorytm istnieje (najlepiej z implementacją Pythona)? W mojej wyszukiwarce znalazłem tylko okrojone funkcje SVD, które przyjmują k jako parametr, co zmusza cię do odgadnięcia go z góry.