Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Decomposizione ai Valori Singolari (SVD) | Algebra Lineare e Operazioni con Matrici
Introduzione a SciPy

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.

12345678910111213
import 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)
Descrizione del codice
expand arrow

Questo codice mostra come eseguire la Decomposizione ai Valori Singolari (SVD) utilizzando SciPy in Python:

  • Si inizia importando le librerie necessarie: numpy per creare e manipolare array, e scipy.linalg.svd per eseguire la SVD;
  • Viene creata una matrice di esempio A come array 2x3 di numeri;
  • La funzione svd scompone la matrice A in tre componenti: U, s e VT. Qui, U contiene i vettori singolari di sinistra, s contiene i valori singolari e VT contiene 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.

12345678910111213141516171819202122
import 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)
Descrizione del codice
expand arrow

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:

  1. Creazione della matrice originale: viene definita una matrice A utilizzando NumPy. Questo è il punto di partenza per la SVD.
  2. SVD completa: la funzione svd di SciPy suddivide A in tre matrici: U, s e VT. Queste rappresentano rispettivamente i vettori singolari di sinistra, i valori singolari e i vettori singolari di destra.
  3. Ricostruzione con tutti i valori singolari: viene creata una matrice diagonale S_full dai 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.
  4. Troncamento per approssimazione: viene creata una nuova matrice diagonale S_truncated che mantiene solo il valore singolare più grande (gli altri vengono azzerati). Moltiplicando U, S_truncated e VT si 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.
  5. 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?

question mark

Quali sono le tre matrici prodotte dalla SVD?

Seleziona la risposta corretta

question mark

Come può essere utilizzata la SVD per la compressione dei dati?

Seleziona la risposta corretta

question mark

Quale funzione di SciPy viene utilizzata per la decomposizione ai valori singolari?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 2. Capitolo 5
some-alt