Quali sono gli algoritmi efficienti per calcolare la decomposizione del valore singolare (SVD)?


17

L'articolo di Wikipedia sull'analisi dei componenti principali afferma che

Esistono algoritmi efficienti per calcolare l'SVD di senza dover formare la matrice , quindi il calcolo dell'SVD è ora il modo standard per calcolare un'analisi dei componenti principali da una matrice di dati, a meno che non sia necessaria solo una manciata di componenti.XXTX

Qualcuno potrebbe dirmi quali sono gli algoritmi efficienti di cui parla l'articolo? Non viene fornito alcun riferimento (l'URL o la citazione di un articolo che propone questo modo di calcolo sarebbe utile).


4
Una ricerca di Google sull'algoritmo di decomposizione a valore singolare fa un ottimo lavoro nell'evidenziare informazioni rilevanti.
whuber

1
Non dimenticare di rimuovere la media prima di SVD per PCA!
Memming

Prova Lanczos SVD!
ciri,

Risposte:


12

Il principale cavallo di lavoro dietro il calcolo di SVD è l' algoritmo QR . Detto questo ci sono molti diversi algoritmi per calcolare il valore decomposizione singolare di un generico -by- matrice . Un ottimo schema sul problema disponibile qui (dalla documentazione di Intel MKL ) è il seguente:MNUNinserisci qui la descrizione dell'immagine

Come vedi, a seconda del tuo caso d'uso, esistono diversi approcci (le convenzioni di denominazione di routine sono disponibili qui ). Questo perché, ad esempio, ci sono forme matriciali in cui una riduzione della famiglia può essere più costosa di una rotazione di Givens (per citare due modi "ovvi" di ottenere QR). Un riferimento standard in materia sono i calcoli a matrice di Golub e Van Loan (suggerirei di utilizzare almeno la 3a edizione). Ho anche trovato Å. Metodi numerici di Björck per i minimi quadrati Problemi ottima risorsa su questo argomento; mentre SVD non è l'obiettivo principale del libro, aiuta a contestualizzare l'uso.

Se devo darti un consiglio generale sull'argomento , non provare a scrivere i tuoi algoritmi SVD a meno che tu non abbia già preso con successo un paio di lezioni sull'algebra lineare numerica e tu sappia cosa stai facendo. So che sembra controintuitivo, ma in realtà c'è una tonnellata di cose che possono andare storte e tu finisci con (nella migliore delle ipotesi) implementazioni non ottimali (se non sbagliate). Ci sono delle ottime suite gratuite in materia (es. Eigen , Armadillo e Trilinos per citarne alcune).


XUN

1
MNUNXTX

2
Sì, ho sbagliato: QR non è limitato alle matrici quadrate. +1, a proposito. Questa domanda è stata una delle domande senza risposta più votate con il tag pca , quindi è bello vederla finalmente risolta.
ameba dice Reinstate Monica l'

La tua risposta non menziona un'intera varietà di algoritmi iterativi. Era apposta? Qualcuno ha posto una domanda sugli algoritmi iterativi SVD, vedi Quali algoritmi veloci esistono per il calcolo dell'SVD troncato? e ho pubblicato una risposta lì cercando di fornire una panoramica. Forse dovremmo almeno incrociare le nostre risposte. E sarebbe sicuramente bello se tu potessi espandere il tuo discutendo degli algoritmi QR rispetto agli algoritmi iterativi.
ameba dice Reinstate Monica il

No, è stato accidentale. Tuttavia hai risposto alla tua domanda nel tuo post; SVD troncato sono essenzialmente composizioni di eigend troncate (vedi ad esempio ARPACK ). Ci sono alcune belle differenze ma vanno bene ; alcuni software (ad es. MATLAB svds) vanno fino al semplice utilizzo della loro funzione SVD troncata come wrapper per le loro eigsroutine di eigendecomposition troncata ( ).
usεr11852 dice Reinstate Monic il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.