Decomposizione ai Valori Singolari (SVD)
Scorri per mostrare il menu
La Decomposizione ai Valori Singolari (SVD) è una tecnica matematica che aiuta a comprendere e semplificare dati complessi. Immagina di avere una grande tabella di numeri: la SVD consente di suddividere questa tabella in tre parti più piccole e più facili da interpretare. Ogni parte rivela diversi aspetti dei dati originali, come i principali schemi o le caratteristiche più importanti.
Lo scopo della SVD è dare senso a informazioni complicate. Separando una matrice (una griglia di numeri) in componenti più semplici, è possibile:
- Identificare le tendenze o le caratteristiche più rilevanti nei dati;
- Rimuovere il rumore o i dettagli irrilevanti che potrebbero confondere l'analisi;
- Ridurre la quantità di informazioni da memorizzare o elaborare, rendendo i calcoli più rapidi ed efficienti;
- Scoprire relazioni o strutture nascoste che non sono evidenti a prima vista.
La SVD viene utilizzata in molte tecnologie quotidiane e in diversi ambiti scientifici. Ad esempio:
- Nella compressione delle immagini, la SVD aiuta a ridurre le dimensioni dei file fotografici senza perdere dettagli importanti;
- Nell'elaborazione di musica e voce, contribuisce a ridurre il rumore di fondo e a chiarire i segnali;
- Nei sistemi di raccomandazione, come quelli utilizzati dai servizi di streaming, la SVD individua schemi nelle preferenze per suggerire nuovi contenuti;
- Nell'elaborazione del linguaggio naturale, aiuta a raggruppare argomenti o significati simili in grandi raccolte di testi.
Comprendere la SVD offre uno strumento potente per lavorare con i dati, indipendentemente dal proprio background. Permette di estrarre informazioni preziose, semplificare i dati e migliorare le prestazioni dei moderni sistemi digitali.
12345678910111213import numpy as np from scipy.linalg import svd # Create a sample matrix A = np.array([[3, 1, 1], [-1, 3, 1]]) # Compute the Singular Value Decomposition U, s, VT = svd(A) print("U matrix:\n", U) print("Singular values:", s) print("VT matrix:\n", VT)
Questo codice mostra come eseguire la Decomposizione ai Valori Singolari (SVD) utilizzando SciPy in Python:
- Si inizia importando le librerie necessarie:
numpyper creare e manipolare array, escipy.linalg.svdper eseguire la SVD; - Viene creata una matrice di esempio
Acome array 2x3 di numeri; - La funzione
svdscompone la matriceAin tre componenti:U,seVT. Qui,Ucontiene i vettori singolari di sinistra,scontiene i valori singolari eVTcontiene i vettori singolari di destra (trasposti); - Il codice stampa ciascuna di queste componenti sulla console per visualizzare i risultati della decomposizione.
Questo esempio aiuta a comprendere come suddividere una matrice nelle sue parti fondamentali, utile per l'analisi dei dati, la compressione e l'individuazione di schemi nei dati.
12345678910111213141516171819202122import numpy as np from scipy.linalg import svd # Original matrix A = np.array([[3, 1, 1], [-1, 3, 1]]) # Full SVD U, s, VT = svd(A) # Reconstruct the original matrix from all singular values S_full = np.zeros((U.shape[1], VT.shape[0])) np.fill_diagonal(S_full, s) A_reconstructed = np.dot(U, np.dot(S_full, VT)) print("Reconstructed matrix (all singular values):\n", A_reconstructed) # Truncate to keep only the largest singular value S_truncated = np.zeros_like(S_full) S_truncated[0, 0] = s[0] A_truncated = np.dot(U, np.dot(S_truncated, VT)) print("Reconstructed matrix (truncated):\n", A_truncated)
Questo codice mostra come utilizzare la decomposizione ai valori singolari (SVD) per scomporre una matrice e poi ricostruirla utilizzando tutti o solo alcuni dei suoi valori singolari. Ecco cosa succede passo dopo passo:
- Creazione della matrice originale: viene definita una matrice
Autilizzando NumPy. Questo è il punto di partenza per la SVD. - SVD completa: la funzione
svddi SciPy suddivideAin tre matrici:U,seVT. Queste rappresentano rispettivamente i vettori singolari di sinistra, i valori singolari e i vettori singolari di destra. - Ricostruzione con tutti i valori singolari: viene creata una matrice diagonale
S_fulldai valori singolari e si moltiplicano le matrici (U,S_full,VT) per ricostruire la matrice originale. Questo dimostra che la SVD può ricostruire perfettamente la matrice quando si usano tutti i valori singolari. - Troncamento per approssimazione: viene creata una nuova matrice diagonale
S_truncatedche mantiene solo il valore singolare più grande (gli altri vengono azzerati). MoltiplicandoU,S_truncatedeVTsi ottiene un'approssimazione della matrice originale. Questo passaggio dimostra la riduzione della dimensionalità: utilizzando meno valori singolari, si semplifica la matrice mantenendone le caratteristiche più importanti. - Output: il codice stampa sia la matrice completamente ricostruita sia la versione troncata, permettendo di confrontare gli effetti della riduzione della dimensionalità. La matrice troncata cattura la struttura principale ma perde alcuni dettagli, mostrando come la SVD possa essere utilizzata per la compressione dei dati e l'estrazione delle caratteristiche.
La SVD è particolarmente utile per la riduzione della dimensionalità. Mantenendo solo i valori singolari più grandi e i relativi vettori, è possibile approssimare la matrice originale con molte meno dimensioni. Questo processo elimina il rumore e le informazioni ridondanti, rendendo i dati più facili da visualizzare e da elaborare, pur conservandone le caratteristiche più importanti. In termini pratici, ciò significa che è possibile comprimere i dataset, velocizzare gli algoritmi di machine learning e scoprire la struttura sottostante dei dati.
1. Quali sono le tre matrici prodotte dalla SVD?
2. Come può essere utilizzata la SVD per la compressione dei dati?
3. Quale funzione di SciPy viene utilizzata per la decomposizione ai valori singolari?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione