Sari la conținutul principal

Descompunerea în valori singulare (SVD): ce trebuie să știi

Descompunerea în valori singulare (SVD) este o metodă de factorizare a matricilor care descompune orice matrice în trei componente mai simple, scoțând la iveală structura sa de bază.
Actualizat 22 mai 2026  · 12 min. citire

Explorează cu AI

Deschide în ChatGPTDeschide în ClaudeDeschide în Perplexity

Ai încercat vreodată să extragi tipare utile dintr-un set de date cu mii de caracteristici?

Știi că un set de date masiv trebuie să aibă o structură utilă ascunsă undeva. Problema este că seturile de date brute conțin mult zgomot, redundanță, valori lipsă și mult mai multe dimensiuni decât îți trebuie de fapt. Majoritatea algoritmilor de învățare automată nu ar reuși să înțeleagă astfel de date sau, în cel mai bun caz, ar încetini timpul de antrenare.

Descompunerea în valori singulare (SVD) descompune orice matrice (în acest caz, setul de date) în trei matrici mai simple care arată structura sa de bază. E matematica din spatele sistemelor de recomandare, compresiei imaginilor și tehnicilor de reducere a dimensionalității precum PCA — iar odată ce o înțelegi, o vei vedea peste tot în munca ta de zi cu zi.

În acest articol, te ghidez prin ce este SVD, cum funcționează, unde este folosit în data science și când ar trebui să alegi o alternativă.

Ți se par confuze concepte precum vectorii și determinantul? Citește întâi articolul nostru Demistificarea conceptelor matematice pentru deep learning înainte să continui cu acesta.

Ce este descompunerea în valori singulare (SVD)?

SVD este o metodă care descompune orice matrice în trei matrici mai simple.

Gândește-te așa. Ai o matrice A — poate fi un set de date sau o imagine. SVD împarte A în trei părți:

Formula SVD

Formula SVD

  • U este o matrice ortogonală m x m. Coloanele ei se numesc vectori singulari stângi și descriu relațiile dintre rândurile lui A

  • \Sigma este o matrice diagonală m x n. Valorile de pe diagonală sunt valorile singulare — întotdeauna nenegative și sortate de la cea mai mare la cea mai mică

  • V* este transpusa conjugată a unei matrici ortogonale n x n. Rândurile ei se numesc vectori singulari drepți și descriu relațiile dintre coloanele lui A

Fiecare parte arată altceva despre datele originale. U conține tiparele la nivel de rând (cum se raportează rândurile între ele), \Sigma conține ponderile de importanță (cât de mult contează fiecare tipar), iar V* conține tiparele la nivel de coloană (cum se raportează coloanele între ele).

Iată o analogie. Imaginează-ți că descrii cuiva o rețetă. O poți împărți în trei părți: ingredientele (ce intră), proporțiile (cât din fiecare) și pașii (cum se combină). Niciuna dintre aceste părți, luată singură, nu recreează preparatul, dar împreună îți dau tot ce trebuie să știi. SVD face același lucru cu matricile — separă „ce”, „cât” și „cum” în componente distincte cu care poți lucra independent.

Ce face SVD să iasă în evidență în algebra liniară este că funcționează pe orice matrice. Nu trebuie să fie pătratică și nici să aibă proprietăți speciale. Orice matrice m x n poate fi descompusă astfel, motiv pentru care apare peste tot în data science.

Cum funcționează SVD în practică

Hai să vedem în detaliu cum funcționează SVD, pornind de la început.

Explicarea descompunerii matricelor

Să zicem că ai o matrice 3×2 A:

Descompunere de matrice

Descompunere de matrice

SVD o descompune în U (3×3), \Sigma (3×2) și V* (2×2). Coloanele lui U provin din vectorii proprii ai lui A x A^T, iar coloanele lui V provin din vectorii proprii ai lui A^T x A. Valorile singulare din \Sigma sunt rădăcinile pătrate ale valorilor proprii din oricare dintre produse.

Vestea bună este că nu trebuie să le calculezi manual. În Python, ai nevoie de o singură linie de cod:

import numpy as np

A = np.array([[1, 2], [3, 4], [5, 6]])
U, sigma, Vt = np.linalg.svd(A, full_matrices=True)

Output Numpy

Output Numpy

Cele trei matrici interacționează prin înmulțire. U rotește datele în spațiul rândurilor, \Sigma le scalează de-a lungul fiecărei axe, iar V* le rotește în spațiul coloanelor. Rezultatul este matricea originală A.

Rolul valorilor singulare

Valorile diagonale din \Sigma îți arată cât contribuie fiecare componentă la matricea per ansamblu.

Prima valoare singulară este întotdeauna cea mai mare — surprinde cel mai dominant tipar din date. Fiecare valoare următoare surprinde mai puțin. Dacă primele câteva valori singulare sunt mari, iar restul sunt aproape de zero, înseamnă că cea mai mare parte a informației din matrice este concentrată în doar câteva componente.

Asta face posibilă compresia datelor.

Poți exclude valorile singulare mici (și coloanele lor corespunzătoare din U și rândurile din V*) fără să pierzi multă informație. Rezultatul este o aproximație de rang inferior a matricei originale, care e mai mică și mai rapid de folosit.

Numărul valorilor singulare nenule îți spune și rangul matricei — numărul de rânduri sau coloane liniar independente. Dacă o matrice 100×50 are doar 10 valori singulare nenule, înseamnă că datele au doar 10 dimensiuni independente. Celelalte 40 sunt redundante.

Reconstruirea matricei

Poți reconstrui matricea originală înmulțind la loc cele trei componente:

Reconstrucția matricei

Reconstrucția matricei

Dar ceea ce îți dorești cu adevărat este reconstrucția parțială. Așadar, în loc să folosești toate valorile singulare, păstrezi doar primele k valori și vectorii lor corespunzători. Asta îți dă o aproximație de rang k a lui A:

Aproximație de matrice rang-k

Aproximație de matrice rang-k

Teorema Eckart–Young garantează că această aproximație de rang k este cea mai apropiată posibilă matrice de rang k de originalul A (măsurat prin norma Frobenius). Cu alte cuvinte, dacă vrei să comprimi o matrice la k dimensiuni, SVD îți dă cel mai bun rezultat posibil.

Aplicații ale SVD în data science

Odată ce începi să cauți, SVD apare în mai multe locuri decât te-ai aștepta.

Ideea este mereu aceeași: iei o matrice mare, păstrezi părțile care contează și elimini restul. Ce se schimbă este ce înseamnă „contează” în funcție de problemă.

Reducerea dimensionalității

Seturile de date cu dimensionalitate mare sunt greu de folosit și de interpretat. Mai multe caracteristici înseamnă timpi de antrenare mai lungi și un risc mai mare de supraînvățare. SVD previne asta reducând numărul de dimensiuni.

Iată cum, pe scurt. Descompui matricea de date, te uiți la valorile singulare și păstrezi doar primele k componente. Valorile singulare mici reprezintă zgomot și variații minore, așa că eliminarea lor abia va afecta calitatea datelor. Ce-ți rămâne este o reprezentare compactă care păstrează cea mai mare parte a structurii originale.

Exact așa funcționează Analiza componentelor principale (PCA). PCA centrează datele și apoi rulează SVD pe rezultat. Componentele principale sunt vectorii singulari drepți, iar valorile singulare îți spun câtă varianță explică fiecare componentă.

Sisteme de recomandare

Companii precum Netflix și Amazon au matrici uriașe utilizator–item în care majoritatea intrărilor sunt goale. Un utilizator evaluează câteva filme din mii, deci matricea este rară. SVD intervine pentru a umple golurile.

Ideea este să descompui matricea de ratinguri în preferințe ale utilizatorilor și caracteristici ale itemilor. Matricea U reprezintă ceea ce contează pentru fiecare utilizator (gen, ritm, ton), iar V* reprezintă ceea ce oferă fiecare item. Valorile singulare din \Sigma scalează acești factori în funcție de importanță. Când le înmulțești înapoi, obții ratinguri prezise pentru filme pe care un utilizator nu le-a văzut încă.

În practică, SVD standard nu funcționează direct pe matrici rare deoarece tratează valorile lipsă ca pe zerouri. De aceea, sistemele folosesc variații precum SVD trunchiat sau metode de factorizare matricială care operează doar pe intrările observate.

Compresia imaginilor

O imagine în tonuri de gri este doar o matrice de valori ale pixelilor. SVD o poate comprima păstrând doar cele mai importante valori singulare.

Să zicem că ai o imagine 1000×1000. SVD complet îți dă 1000 de valori singulare. Dar dacă păstrezi doar primele 50, reconstruiești imaginea cu doar 50 de componente în loc de 1000. Imaginea va fi ușor neclară, dar recognoscibilă — iar stocarea scade de la 1.000.000 de valori la aproximativ 100.500 (50 coloane din U + 50 valori singulare + 50 rânduri din V*).

Mai multe valori singulare înseamnă calitate mai bună a imaginii, dar compresie mai mică. Mai puține valori înseamnă fișiere mai mici, dar mai multă pierdere. Tu alegi unde trasezi linia în funcție de cazul tău de utilizare.

Considerații de performanță și limitări

Cu cât matricea e mai mare, cu atât costul computațional e mai mare.

Cost computațional

SVD complet pe o matrice m x n are o complexitate de timp O(mn²) (presupunând m >= n). Pentru matrici mici, e în regulă. Pentru o matrice cu milioane de rânduri și mii de coloane, este costisitor.

Memoria este celălalt blocaj. SVD complet produce trei matrici dense, iar stocarea lor simultan poate depăși RAM-ul disponibil.

Soluția e să eviți calculul SVD complet când nu ai nevoie. SVD trunchiat calculează doar primele k valori singulare și vectorii lor, ceea ce e mult mai rapid. În Python, scipy.sparse.linalg.svds și sklearn.decomposition.TruncatedSVD fac asta. SVD randomizat merge și mai departe, folosind eșantionare aleatorie pentru a aproxima descompunerea, și funcționează bine când ai nevoie doar de componentele dominante.

Stabilitate și acuratețe

SVD este numeric stabil în majoritatea cazurilor, dar poate avea dificultăți cu anumite tipare de date.

Datele foarte zgomotoase sunt un exemplu. Dacă raportul semnal–zgomot este mic, valorile singulare de top nu se separă de zgomot. Vei ajunge fie să păstrezi zgomot în aproximație, fie să reduci semnalul când trunchiezi.

Matricile prost condiționate sunt o altă problemă. Când raportul dintre cea mai mare și cea mai mică valoare singulară este uriaș (număr de condiționare mare), erorile numerice mici din timpul calculului sunt amplificate. Asta poate produce rezultate nesigure, mai ales din cauza limitelor de precizie în virgulă mobilă.

Soluția e să inspectezi valorile singulare înainte de trunchiere. Plotează-le și caută o cădere clară între semnal și zgomot. Dacă decăderea e graduală, fără un „cot” evident, SVD s-ar putea să nu fie cel mai bun instrument pentru acel set de date.

Alternative la SVD

SVD nu este singura descompunere matricială și nu este întotdeauna cea mai bună alegere pentru orice sarcină.

Fiecare alternativă de mai jos rezolvă un tip specific de problemă. Nu sunt înlocuitori pentru SVD, deoarece funcționează sub alte presupuneri și constrângeri. Alegerea corectă, ca întotdeauna, depinde de sarcina pe care încerci să o rezolvi.

Descompunerea în valori proprii

Descompunerea în valori proprii este înrudită cel mai strâns cu SVD. Ea descompune o matrice pătratică în valori și vectori proprii:

Formula descompunerii în valori proprii

Formula descompunerii în valori proprii

Unde Q conține vectorii proprii, iar \Lambda este o matrice diagonală a valorilor proprii.

Problema este că funcționează doar pe matrici pătratice. Dacă matricea ta de date este m x n unde m != n, descompunerea în valori proprii nu poate lucra direct cu ea. SVD funcționează pe orice formă de matrice, motiv pentru care este instrumentul mai general.

Pentru matrici pătratice, simetrice (precum matricile de covarianță), descompunerea în valori proprii și SVD produc rezultate strâns înrudite. Valorile singulare ale unei matrici semidefinite pozitiv simetrice sunt valorile ei proprii. Așa că, dacă lucrezi cu matrici de covarianță în PCA, ambele metode îți dau aceleași rezultate. SVD este doar versiunea care se generalizează la cazurile ne-pătratice.

Descompunerea QR

Descompunerea QR împarte o matrice într-o matrice ortogonală Q și o matrice triunghiulară superioară R:

Formula descompunerii QR

Formula descompunerii QR

Este mai rapidă decât SVD pentru anumite sarcini, în special pentru rezolvarea sistemelor de ecuații liniare și a problemelor de cele mai mici pătrate.

Compromisul este la nivel de informație. QR nu îți dă valori singulare, deci nu îți poate spune nimic despre rangul matricei sau care componente au cea mai mare pondere. Dacă ai nevoie să rezolvi Ax = b și nu te interesează structura de bază, QR e o opțiune bună. Dar dacă ai nevoie să înțelegi sau să comprimi datele, SVD este alegerea mai bună.

Factorizarea matricială nenegativă (NMF)

NMF descompune o matrice în două matrici în care toate valorile sunt nenegative:

Formula NMF

Formula NMF

Această constrângere face ca NMF să fie potrivită pentru date în mod inerent nenegative (de exemplu, intensități ale pixelilor sau numărări de cuvinte). Pe de altă parte, SVD nu impune asta. Matricile sale descompuse pot avea valori negative, ceea ce uneori produce componente greu de interpretat.

NMF este deosebit de populară în text mining și modelarea subiectelor. Fiecare coloană din W poate reprezenta un subiect, iar fiecare rând din H arată cât din acel subiect apare în fiecare document. Constrângerea de nenegativitate înseamnă că subiectele sunt construite din combinații aditive de cuvinte, ceea ce le face mai ușor de citit decât componentele cu semne mixte din SVD.

Dezavantajul este că NMF nu garantează o soluție unică, iar rezultatele depind de inițializare. SVD produce întotdeauna același output pentru același input.

SVD randomizat

Dacă matricea ta e prea mare pentru SVD complet, dar tot vrei valori singulare, merită să te uiți la SVD randomizat. Folosește proiecții aleatorii pentru a aproxima primele k valori și vectori singulare, fără a calcula descompunerea completă. Biblioteci precum scikit-learn (TruncatedSVD) și fbpca de la Facebook implementează această abordare și scalează bine la matrici cu milioane de rânduri.

Tabelul de mai jos recapitulează când să alegi fiecare metodă.

Alternative la SVD

Alternative la SVD

Alte aspecte de luat în calcul cu SVD

Câteva lucruri obișnuite îi încurcă pe mulți începători în data science.

Primul este interpretarea greșită a valorilor singulare. O valoare singulară mare înseamnă că acea componentă explică multă varianță în date — nu înseamnă că acea componentă este „importantă” într-un sens specific domeniului. De exemplu, valoarea singulară dominantă într-o matrice de ratinguri ale utilizatorilor poate surprinde faptul că majoritatea oamenilor evaluează filme populare, nu un tipar semnificativ de preferințe. Interpretează întotdeauna valorile singulare în contextul datelor tale, nu doar după magnitudinea lor.

Al doilea este să apelezi la SVD când nu ai nevoie. Pe seturi de date mici (câteva sute de rânduri și câteva coloane), SVD doar adaugă complexitate inutilă. Metode simple precum analiza corelațiilor sau selecția de caracteristici de bază rezolvă adesea treaba mai repede și cu mai puțin cod. SVD este excelent când ai date cu dimensionalitate mare și structură redundantă — dacă setul tău nu se încadrează aici, alege metode mai simple.

Concluzie

SVD descompune orice matrice în trei componente care îi arată structura. Valorile singulare îți spun ce părți din date contează cel mai mult, iar vectorii singulari stângi și drepți îți arată tiparele pe rânduri și coloane din spatele lor.

Această descompunere stă la baza multor instrumente practice pe care le folosești zilnic. Sistemele de recomandare o folosesc pentru a prezice ratinguri lipsă. Compresia imaginilor o folosește pentru a reduce dimensiunea fișierelor păstrând calitatea vizuală. Matematica din spatele lor este aproape identică, chiar dacă domeniile sunt complet diferite.

Dar SVD nu este întotdeauna instrumentul potrivit. Este costisitor pe matrici mari și poate amesteca semnalul cu zgomotul când valorile singulare nu se separă bine. De asemenea, este excesiv pentru seturi de date mici. Alternative precum descompunerea QR, descompunerea în valori proprii și NMF gestionează mai bine anumite cazuri specifice.

Cheia este să știi când să folosești SVD și când ceva mai simplu va funcționa mai bine. Iar pentru a căpăta această cunoaștere, înscrie-te în parcursul Machine Learning Scientist in Python și devino pregătit pentru job în 2026.

Întrebări frecvente despre SVD

Ce este descompunerea în valori singulare (SVD)?

SVD este o metodă de descompunere a matricilor care împarte orice matrice în trei componente: vectori singulari stângi (U), valori singulare (Σ) și vectori singulari drepți (V*). Funcționează pe orice matrice, indiferent de formă sau dimensiune. SVD scoate la iveală structura de bază a datelor separându-le în tipare și importanța lor relativă.

De ce este folosit SVD în data science și machine learning?

SVD ajută la reducerea numărului de dimensiuni în seturi de date cu dimensionalitate mare, păstrând cele mai importante tipare. Este matematica din spatele PCA și a sistemelor de recomandare. Aceste aplicații se bazează pe aceeași idee: păstrezi componentele dominante și le elimini pe celelalte.

Care este diferența dintre SVD și descompunerea în valori proprii?

Descompunerea în valori proprii funcționează doar pe matrici pătratice, în timp ce SVD funcționează pe orice formă de matrice. Pentru matrici pătratice, simetrice, precum cele de covarianță, ambele metode produc rezultate strâns înrudite — valorile singulare ale unei matrici semidefinite pozitiv sunt valorile ei proprii. SVD este instrumentul mai general, motiv pentru care este implicit în majoritatea fluxurilor de lucru din data science.

Cum se leagă valorile singulare de compresia datelor?

Valorile singulare sunt sortate de la cea mai mare la cea mai mică, iar fiecare reprezintă câtă varianță explică o anumită componentă. Eliminarea valorilor singulare mici (și a vectorilor lor corespunzători) îndepărtează tiparele minore și zgomotul, păstrând structura dominantă. Faci un mic compromis de acuratețe pentru o mare reducere de dimensiune.

Când ar trebui să evit să folosesc SVD?

SVD este costisitor pe matrici mari, cu o complexitate în timp de O(mn^2) pentru descompunerea completă. Pentru seturi mici, cu câteva caracteristici, metode mai simple precum analiza corelațiilor sau selecția de caracteristici de bază rezolvă treaba mai repede. Dacă matricea este foarte mare și ai nevoie doar de componentele de top, SVD trunchiat sau randomizat este o alegere mai potrivită decât SVD complet.

Subiecte

Învață cu DataCamp

course

Clasificatori liniari în Python

4 oră
66.6K
În acest curs vei învăța detaliile clasificatorilor liniari precum regresia logistică și SVM.
Vezi detaliiRight Arrow
Începeți Cursul
Vezi mai multRight Arrow