Aggiornamento della decomposizione SVD dopo aver aggiunto una nuova riga alla matrice


17

Supponiamo di avere una matrice densa di dimensioni , con decomposizione SVDIn posso calcolare la SVD come segue: .Am×n

A=USV.
Rsvd(A)

Se una nuova riga viene aggiunta a , si può calcolare la nuova decomposizione SVD sulla base di quella vecchia (cioè usando , e ), senza ricalcolare SVD da zero?(m+1)AUSV


3
Controlla la letteratura di rank 1 updates. Le veloci revisioni SVD online per i sistemi di raccomandazione leggeri di Brand sono un primo documento accessibile. Purtroppo non ho visto qualcosa per SVD già implementato in R. Gli aggiornamenti di Cholesky esistono ( updownda Matrix) grazie a CHOLMOD. La scarsità della tua matrice renderà davvero diversa la tua soluzione finale; supponi una matrice densa o sparsa? A
usεr11852 dice Reinstate Monic il

2
Da +1 a @ usεr11852. Si noti inoltre che è molto più semplice e standard aggiornare QR e in alcune applicazioni QR è sufficiente e non è necessario SVD. Quindi pensa anche alla tua applicazione.
ameba dice di reintegrare Monica il

Sì, la matrice è densa.
user1436187,

1
"Abbandona" la letteratura dei raccomandatori e concentrati sull'elaborazione delle immagini. Domande simili con i tour sono state pubblicate in termini di "nuove immagini" in un database. Ad esempio, il mio sospetto è che qualcuno debba avere un algoritmo per aggiornare on-line le voci delle sue autovetture. Questi ragazzi lavorano con rappresentazioni a matrice densa.
usεr11852 dice Reinstate Monic il

Risposte:


14

Sì, è possibile aggiornare una decomposizione SVD dopo aver aggiunto una nuova riga alla matrice esistente.

In generale, questa formulazione del problema " aggiungi uno a " è nota come aggiornamenti di livello uno . Il collegamento MathOverflow fornito da @amoeba su " efficienti aggiornamenti di secondo livello di una decomposizione di autovalori " è un ottimo primo passo se si desidera iniziare a approfondire la questione; il primo documento fornisce una soluzione esplicita alla tua domanda specifica. Giusto per chiarire cosa significano il rango 1 e il rango 2 in modo da non confonderti, se la tua nuova è tale che:UN*

UN*=UN-uvT

Dove e v sono vettori, allora ti riferisci a questo come un aggiornamento di livello uno (o perturbazione ). Le basi di questo aggiornamento sono dettate dalla formula Sherman-Morrison. . Se la perturbazione è più di un rango, ad es. A = A - U V Tuv

UN*=UN-UVT

la formula Woodbury entra in gioco. Se vedi queste formule noterai che sono coinvolti molti aspetti inversi. Non li risolvi direttamente. Dato che hai già risolto molti dei loro sottosistemi (ovvero hai già calcolato una decomposizione) li usi per ottenere stime più rapide e / o più stabili. (Ecco perché la gente ricerca ancora questo campo.) Ho usato molto il libro " Statistiche computazionali " di JE Gentle; Penso che Chapt. 5 Algebra lineare numerica ti imposterà correttamente. (Il super classico: " Matrix Algebra From a Statistician's Perspective " di Harville sfortunatamente non tocca affatto gli aggiornamenti del grado.)

Guardando al lato statistico / applicativo delle cose, gli aggiornamenti di rango uno sono comuni nei sistemi di raccomandazione perché si possono avere migliaia di voci dei clienti e ricalcolare l'SVD (o qualsiasi data scomposizione) ogni volta che un nuovo utente registra o un nuovo prodotto è aggiunto o rimosso è piuttosto dispendioso (se non irraggiungibile). Di solito le matrici del sistema di raccomandazione sono scarse e questo rende gli algoritmi ancora più efficienti. Un primo documento accessibile è il manoscritto " Revisioni SVD online veloci per sistemi di raccomandazione leggeri " di M. Brand. Andando verso matrici dense, penso che guardare i documenti di Pattern Recognition ed Imaging Processing possa portarti abbastanza lontano nell'ottenere un vero algoritmo da usare. Ad esempio i documenti:

  1. Apprendimento incrementale delle principali componenti bidirezionali per il riconoscimento facciale (2009) di Ren e Dai,
  2. Sull'apprendimento subspaziale incrementale e robusto (2003) di Li et al.
  3. Estrazione sequenziale di basi Karhunen-Loeve e sua applicazione alle immagini (2000) di Levey e Lindenbaum.
  4. Incremental Learning for Robust Visual Tracking (2007) di Ross et al.

tutti sembrano affrontare lo stesso problema nel loro nucleo; stanno arrivando nuove funzionalità e dobbiamo aggiornare la nostra rappresentazione di conseguenza rapidamente . Si noti che queste matrici non sono simmetriche o addirittura quadrate. Un altro lavoro di M. Brand può anche affrontare questo problema (vedere l'articolo " Modifiche rapide di basso rango della decomposizione del valore singolare sottile (2006) " - questo menzionato anche nel link MO riportato all'inizio del post). molti grandi articoli sull'argomento, ma la maggior parte tende ad essere fortemente matematica (ad es. il documento di Benaych-Georgesa e Nadakuditi su " I valori e i vettori singolari di perturbazioni di basso rango di grandi matrici casuali rettangolari (2012)") e non credo che presto aiuteranno a trovare una soluzione. Suggerirei di concentrarti sulla letteratura sull'elaborazione delle immagini.

Sfortunatamente non ho riscontrato implementazioni R per le routine di aggiornamento di primo livello. La risposta su " Implementazione SVD aggiornabile in Python, C o Fortran? " Di Computational Science SE offre una serie di implementazioni MATLAB e C ++ che potresti prendere in considerazione. Di solito l'implementazione di R, Python, ecc. Sono wrapper per le implementazioni C, C ++ o FORTRAN.


6
Questo è un bel commento, ma sono rimasto deluso dal non trovare una risposta alla domanda. Si scopre che un altro articolo di Matthew Brand , collegato alla risposta MO, contiene una soluzione esplicita.
whuber

5
+1 sia per te che per @whuber (e non credo che si debba evitare di "duplicare" qualsiasi informazione fornita su un altro sito SE! Direi che dovremmo cercare di rendere autosufficienti le informazioni fornite su questo sito il più possibile. In effetti, quasi tutte le informazioni qui contenute stanno in qualche modo duplicando libri di testo, risorse online o documenti di ricerca esistenti). Una domanda: hai menzionato le formule Sherman-Morrison e Woodbury che descrivono come cambia l'inverso della matrice dopo un aggiornamento di livello uno o di livello superiore; cosa hanno a che fare con SVD?
ameba dice di reintegrare Monica il

1
Capisco il motivo per cui potresti voler indirizzare le persone alle pagine MO per quel link, ma potresti considerare di affermare direttamente che risolve il problema! ("Un buon primo passo" è un enorme eufemismo.) Gran parte del tuo commento potrebbe essere frainteso nel senso che indica che non hai ancora trovato una buona soluzione.
whuber

1
@whuber: "Buono" è diventato "fantastico" e ora ho citato anche il giornale, meglio? :) (Grazie per il feedback a proposito.)
Usεr11852 dice Reinstate Monic

2
Solo per amor di storia: Bunch e Nielsen sono stati i primi a dimostrare un modo per aggiornare e aggiornare l'SVD. Il metodo del marchio in effetti generalizza i metodi di questo documento più vecchio.
JM non è uno statistico 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.