Analisi delle componenti principali (PCA)
In questa pagina 6
Con più di tre variabili () i grafici 1D, 2D e 3D di Correlazione e visualizzazione dei datiLa correlazione di Pearson $r=\sum(X_i-\bar X)(Y_i-\bar Y)/\big(\sqrt{\sum(X_i-\bar X)^2}\sqrt{\sum(Y_i-\bar Y)^2}\big)\in[-1,1]$ misura la relazione lineare tra due variabili (covarianza divisa per le deviazioni standard); correlazione non implica causalità. Serve a capire quali variabili contano per il target e a eliminare quelle quasi duplicate (|r| molto alto). Gli indicatori di sintesi non bastano (quartetto di Anscombe, Datasaurus): vanno affiancati ai grafici: istogramma, KDE, box plot, violin plot, heatmap di correlazione, scatter plot e matrice di scatter plot.Correlazione e visualizzazione dei dati → non bastano (Lezione 5 · Visualizzazione di dati multidimensionali e PCA). La PCA (Principal Component Analysis) trova pochi nuovi assi, combinazioni lineari delle variabili originali, che conservano la maggior parte della variabilità dei dati: con i primi due o tre assi si può disegnare il dataset (compressione con perdita, lossy), e le stesse componenti servono per ridurre il numero di variabili. L'implementazione da zero in NumPy è in Esercizio - PCA da zero sul dataset California Housing (Lezione 6 · Laboratorio di statistica, visualizzazioni e PCA). La nota richiede Statistica per il machine learningI dati di un problema ML si organizzano nella matrice di progetto $X$ ($n$ osservazioni, $p$ variabili). La statistica serve a capirli, ripulirli e prepararli: i momenti (media $\mu$, varianza $\sigma^2$, asimmetria, curtosi), i quartili con lo scarto interquartile $\mathrm{IQR}=Q_3-Q_1$ (all'esame senza interpolazione), la moda per i dati categorici. Con queste quantità si imputano i dati mancanti (media o mediana), si eliminano le variabili costanti e si standardizza con lo z-score $z=(x-\mu)/\sigma$, usando sempre media e deviazione standard del solo training set.Statistica per il machine learning → (media, varianza, standardizzazione), la covarianza (Covarianza e coefficiente di correlazioneCov(X, Y) = E[(X − E X)(Y − E Y)] = E[XY] − E[X]E[Y] misura quanto X e Y variano insieme; è bilineare, Cov(X, X) = Var(X), Var(X + Y) = Var X + Var Y + 2Cov(X, Y); ρ = Cov / (σ_X σ_Y) sta in [−1, 1] e vale ±1 solo per legami lineari. Indipendenti ⇒ non correlate, ma non viceversa (tranne per i vettori gaussiani).Covarianza e coefficiente di correlazione →) e la nozione di autovalori e autovettori (Autovalori e autovettoriUn autovettore è un vettore non nullo che una funzione lineare manda in un suo multiplo; si trovano gli autovalori come radici del polinomio caratteristico det(A − λI) e gli autovettori come nucleo di A − λI. Matrici simili hanno gli stessi autovalori.Autovalori e autovettori →, DiagonalizzazioneUna matrice è diagonalizzabile se è simile a una diagonale, cioè se esiste una base di autovettori: allora A = S D S⁻¹ con gli autovettori nelle colonne di S e gli autovalori in D. Criterio: tutti gli autovalori nel campo e molteplicità geometrica uguale a quella algebrica. Le matrici simmetriche reali hanno autovalori reali.Diagonalizzazione →).
L'idea in due dimensioni
Si abbiano topi e di ciascuno l'espressione di geni (dati delle slide):
| topo 1 | topo 2 | topo 3 | topo 4 | topo 5 | topo 6 | |
|---|---|---|---|---|---|---|
| gene 1 | 10 | 11 | 8 | 3 | 2 | 1 |
| gene 2 | 6 | 4 | 5 | 3 | 2,8 | 1 |
(Le slide usano questa tabella con un'inversione dei valori degli ultimi due topi nella prima versione: qui si usa quella delle slide successive.) Con un solo gene si può disegnare un asse, con due un piano , con tre uno spazio 3D, ma con tre geni già non si «vede» bene.
Passo 1: centrare. Si calcola il centro dei dati con le medie: , . Si traslano i dati sottraendo la media di ciascuna variabile, così che il centro coincida con l'origine . Le posizioni relative dei punti non cambiano. I punti centrati sono:
.
Passo 2: la retta che meglio si adatta. Si cerca la retta passante per l'origine che passa «più vicino possibile» ai punti. Ruotando la retta e proiettando i punti su di essa si possono seguire due strategie:
- minimizzare le distanze tra i punti e la loro proiezione sulla retta;
- massimizzare le distanze tra la proiezione di ogni punto e l'origine.
Sono la stessa cosa. Per ogni punto, il punto, l'origine e la proiezione formano un triangolo rettangolo (la proiezione ortogonale su una retta è in Complemento ortogonale e proiezioni ortogonaliL'ortogonale U⊥ di un sottospazio è un sottospazio di dimensione n − dim U, e R^n = U ⊕ U⊥; ogni vettore si scompone in proiezione su U più componente ortogonale; la proiezione è il punto di U più vicino e si calcola con un sistema o con la matrice di proiezione A(AᵀA)⁻¹Aᵀ.Complemento ortogonale e proiezioni ortogonali →) e per il teorema di Pitagora dove è la distanza del punto dall'origine (non cambia, perché i dati sono fermi), la distanza dalla retta e la distanza della proiezione dall'origine. Se è fisso, aumentare significa diminuire , e viceversa. Sommando su tutti i punti: è costante, quindi minimizzare equivale a massimizzare . Si sceglie di massimizzare , perché è la varianza dei dati proiettati: la retta cercata è quella lungo cui i punti proiettati sono più sparpagliati.
La retta trovata è la prima componente principale (PC1). Si indica la somma dei quadrati delle distanze delle proiezioni dall'origine con .
Esempio. Per i dati sopra, ; proiettando sulla migliore retta si ottiene e quindi , con . Qualunque altra retta per l'origine ha .
Passo 3: la «ricetta». La retta ha una pendenza, per esempio un vettore lungo in direzione del gene 1 e nella direzione del gene 2: la PC1 è «4 parti di gene 1 più 1 parte di gene 2», cioè una combinazione lineare delle variabili. Si normalizza il vettore a lunghezza 1: la lunghezza di è , e dividendo ogni coefficiente per si ottiene , lo stesso rapporto 4 a 1. I coefficienti del vettore normalizzato si chiamano loading (loading scores) e dicono quanto ciascuna variabile contribuisce alla componente; il vettore unitario è l'autovettore (o vettore singolare) della PC1. (Nelle slide i valori e , e poi e , sono numeri illustrativi della figura, non derivano dalla tabella: con i dati veri il loading della PC1 è e le varianze sono e , vedi sotto.)
Passo 4: le altre componenti. In 2D, la seconda componente principale (PC2) è la retta per l'origine perpendicolare a PC1. Nell'esempio delle slide la ricetta è « parti di gene 1 e parti di gene 2», cioè dopo la normalizzazione . In dimensione si ottengono componenti, tutte ortogonali tra loro, ciascuna scelta come retta che massimizza tra quelle ortogonali alle precedenti. Il loro numero è al più il minore tra e .
Autovalori, varianza spiegata e scree plot
Definizione (autovalore di una componente). , cioè la varianza dei dati proiettati sulla componente . La radice quadrata di si chiama valore singolare. In forma matriciale è l'autovalore della matrice di covarianza.
La variazione totale è la somma delle varianze delle componenti, (è anche la somma delle varianze delle variabili originali: la PCA ridistribuisce la variabilità, non la cambia).
Formula (varianza spiegata). La frazione cumulata fino alla componente si calcola sommando.
Esempio (dati dei topi, due geni). La matrice di covarianza dei dati è . Gli autovalori sono le radici di , cioè , e valgono e . PC1 spiega della varianza, PC2 il . L'autovettore di risolve , cioè : normalizzato dà .
Grafico interattivo: Dati dei topi (geni 1 e 2) centrati: PC1 (rossa) è la retta che passa più vicino ai punti e lungo cui la varianza è massima (96 % del totale), PC2 (tratteggiata) è perpendicolare
Scree plot. Il grafico a barre delle frazioni di varianza spiegata da ciascuna componente. Serve per scegliere quante componenti tenere: se le prime due o tre barre sono alte e le altre basse, il disegno con due o tre componenti è una buona approssimazione; se le barre sono tutte simili, due componenti non rappresentano bene i dati. Una regola pratica è tenere il numero minimo di componenti per cui la frazione cumulata supera una soglia (per esempio il ).
Esempio (caso con tre geni, slide). Se PC1, PC2 e PC3 spiegano , e , un grafico 2D con PC1 e PC2 rappresenta il della variazione.
La PCA con il metodo della covarianza
La procedura usata in laboratorio, per una matrice con righe e colonne:
- Standardizzare (z-score): per ogni colonna (Statistica per il machine learningI dati di un problema ML si organizzano nella matrice di progetto $X$ ($n$ osservazioni, $p$ variabili). La statistica serve a capirli, ripulirli e prepararli: i momenti (media $\mu$, varianza $\sigma^2$, asimmetria, curtosi), i quartili con lo scarto interquartile $\mathrm{IQR}=Q_3-Q_1$ (all'esame senza interpolazione), la moda per i dati categorici. Con queste quantità si imputano i dati mancanti (media o mediana), si eliminano le variabili costanti e si standardizza con lo z-score $z=(x-\mu)/\sigma$, usando sempre media e deviazione standard del solo training set.Statistica per il machine learning →).
- Matrice di covarianza: , con i dati centrati, di dimensione (l'elemento è la covarianza tra le variabili e , Covarianza e coefficiente di correlazioneCov(X, Y) = E[(X − E X)(Y − E Y)] = E[XY] − E[X]E[Y] misura quanto X e Y variano insieme; è bilineare, Cov(X, X) = Var(X), Var(X + Y) = Var X + Var Y + 2Cov(X, Y); ρ = Cov / (σ_X σ_Y) sta in [−1, 1] e vale ±1 solo per legami lineari. Indipendenti ⇒ non correlate, ma non viceversa (tranne per i vettori gaussiani).Covarianza e coefficiente di correlazione →; prodotti tra matrici: Operazioni tra matriciLe matrici m×n formano uno spazio vettoriale (somma e prodotto per scalare elemento per elemento); il prodotto righe per colonne corrisponde alla composizione di funzioni lineari, è associativo ma non commutativo; la trasposta scambia righe e colonne e (AB)^T = B^T A^T.Operazioni tra matrici →).
- Decomposizione in autovalori e autovettori di : autovettori (direzioni ortogonali) e autovalori (varianza lungo ciascuna).
- Ordinare gli autovettori per autovalore decrescente.
- Proiettare: le componenti principali dei dati (scores) sono , dove ha per colonne i primi autovettori.
Teorema (perché gli autovettori). Tra tutti i vettori unitari (), la varianza dei dati proiettati è , ed è massima quando è l'autovettore di con autovalore più grande; il massimo vale .
Esempio. Per e : , massimo per (l'autovettore ).
Perché. Con il vincolo si usano i moltiplicatori di Lagrange (Massimi e minimi vincolati e moltiplicatori di LagrangeGli estremi di f sul vincolo g = c si cercano per sostituzione, per parametrizzazione o con i moltiplicatori di Lagrange: se f, g sono C¹, P0 è un estremo vincolato e ∇g(P0) ≠ 0, esiste λ con ∇f(P0) = λ∇g(P0) (curva di livello di f tangente al vincolo). Si risolve il sistema ∇f = λ∇g, g = c, si aggiungono i punti del vincolo con ∇g = 0 e si confrontano i valori; se il vincolo è compatto, Weierstrass garantisce massimo e minimo.Massimi e minimi vincolati e moltiplicatori di Lagrange →): si annulla il gradiente di , che dà , cioè (autovettore); sostituendo, . Quindi il massimo è l'autovalore più grande. La componente successiva si cerca ortogonale alla precedente: gli autovettori di una matrice simmetrica sono ortogonali (teorema spettrale: Teorema spettrale e forme quadraticheUna funzione lineare è simmetrica se f(v)·w = v·f(w); in una base ortonormale ha matrice simmetrica. Teorema spettrale: f è simmetrica se e solo se esiste una base ortonormale di autovettori, cioè A simmetrica ⇔ PᵀAP diagonale con P ortogonale. Applicato alle forme quadratiche, permette di scriverle come somma di quadrati con gli autovalori come coefficienti.Teorema spettrale e forme quadratiche →), quindi la scelta è automatica.
Un'alternativa: la SVD. Se è la decomposizione ai valori singolari, le colonne di sono le componenti principali, i valori singolari sono e , gli scores sono . È il modo in cui le librerie calcolano la PCA («sotto il cofano»). Gli autovettori sono definiti a meno del segno: due implementazioni possono dare grafici specchiati, ugualmente corretti.
Standardizzare: quando e perché
Se le variabili hanno scale molto diverse, la PCA sceglie la direzione di quella con varianza numericamente più grande, che dipende solo dall'unità di misura. Con il dataset California Housing (senza MedInc, 7 variabili):
- senza standardizzare, la prima componente spiega il della varianza e il suo autovettore ha sulla variabile
Population(che ha valori dell'ordine di migliaia) e quasi sulle altre: la PCA sta solo copiandoPopulation; - standardizzando, gli autovalori sono (somma , pari a perché ogni variabile ha varianza ): la frazione spiegata è , cumulata . Per spiegare almeno il servono componenti.
Grafico interattivo: Scree plot del California Housing standardizzato (frazione di varianza spiegata, in %): le prime cinque componenti raggiungono il 96,9 %
import numpy as np
Z = (X - X.mean(0)) / X.std(0) # 1. standardizza
S = np.cov(Z, rowvar=False) # 2. covarianza (p x p)
lam, V = np.linalg.eig(S) # 3. autovalori/autovettori
order = np.argsort(lam)[::-1] # 4. ordine decrescente
lam, V = lam[order], V[:, order]
k = np.argmax(np.cumsum(lam / lam.sum()) >= 0.95) + 1 # componenti per il 95 %
scores = Z @ V[:, :k] # 5. proiezionenp.cov vuole le variabili sulle righe: con le osservazioni sulle righe serve rowvar=False. Con scikit-learn basta PCA(n_components=2).fit_transform(Z).
Limiti della PCA e metodi non lineari
La PCA è lineare e fa in modo che oggetti lontani restino lontani (conserva la struttura globale), ma la struttura locale non è preservata e non tiene conto di eventuali varietà curve (manifold) su cui giacciono i dati. Per la sola visualizzazione si usano metodi non lineari.
t-SNE (t-distributed Stochastic Neighbor Embedding). Idea: punti simili nello spazio originale devono restare vicini nello spazio ridotto (2D). Concentra l'attenzione sulle piccole distanze, quindi conserva la struttura locale.
- Nello spazio originale la similarità tra e è una probabilità gaussiana centrata in , , con scelto in modo da avere una perplexity fissata; poi si simmetrizza, .
- Nello spazio ridotto si usa una distribuzione t di Student (code pesanti): .
- Le coordinate si ottengono minimizzando con la discesa del gradiente la divergenza di Kullback-Leibler : se è grande (vicini) e piccolo la penalità è alta, quindi i vicini restano vicini; se è piccolo e grande la penalità è lieve, quindi punti lontani possono finire vicini.
- La perplexity è un iperparametro (impostato prima dell'addestramento, non appreso dai dati): è una misura continua del «numero effettivo di vicini» di ogni punto e bilancia struttura locale e globale. La scelta è delicata.
- Limiti: non scala bene, non preserva la struttura globale, le distanze tra cluster non hanno significato. Va bene per visualizzare, non per estrarre feature.
UMAP (Uniform Manifold Approximation and Projection). Costruisce un grafo «fuzzy» dei dati ad alta dimensione e ottimizza un grafo in bassa dimensione il più simile possibile. È molto più veloce di t-SNE, conserva meglio la struttura globale (categorie simili restano vicine) ed è usabile anche per il feature engineering. Parametri: n_neighbors (compromesso locale/globale: valori bassi struttura locale) e min_dist (distanza minima tra punti nello spazio ridotto: valori bassi danno agglomerati più compatti). Limiti: scelta degli iperparametri cruciale, dimensioni dei cluster e distanze tra cluster non significative, risultati diversi tra esecuzioni.
from sklearn.manifold import TSNE
X_2d = TSNE(n_components=2, random_state=42).fit_transform(X) # es. digits: 64 -> 2 dimensioniNell'esempio di laboratorio (cifre scritte a mano, , quindi 64 variabili) due variabili qualsiasi non separano le cifre, mentre il t-SNE le raggruppa in cluster ben distinti.
Errori tipici
- Applicare la PCA a variabili con scale diverse senza standardizzare.
- Calcolare media e deviazione standard (e la PCA) sull'intero dataset prima della divisione train/test: i parametri vanno stimati sul training e applicati al test.
- Interpretare le distanze tra cluster in un grafico t-SNE o UMAP come distanze reali.
- Scambiare le componenti principali per variabili originali: sono combinazioni lineari, meno interpretabili.
- Confondere il segno degli autovettori: due grafici specchiati sono entrambi corretti.
- Tenere troppe poche componenti senza guardare lo scree plot.
Versione ripasso
Definizione. La PCA trova assi ortogonali (componenti principali) combinazioni lineari delle variabili, ordinati per varianza dei dati proiettati: con i primi 2-3 si visualizza (), con i primi si riducono le variabili. Compressione lossy che conserva la struttura globale.
Esempio. California Housing standardizzato: servono componenti per il della varianza.
Idea. Dati centrati; la retta per l'origine che minimizza le distanze dai punti massimizza le distanze delle proiezioni, perché con fisso. PC1 = retta con massima; PC2 = perpendicolare. Vettore unitario = autovettore; coefficienti = loading.
Formula (varianza spiegata). è la varianza lungo PC; frazione spiegata ; scree plot = grafico delle frazioni.
Esempio. Topi, due geni: , , PC1 spiega il , loading .
Metodo della covarianza. (1) standardizzare; (2) ; (3) autovalori e autovettori; (4) ordinare per autovalore decrescente; (5) proiettare . Perché autovettori: (Lagrange: ). SVD: , . Segno dell'autovettore arbitrario.
Standardizzazione. Senza scaling domina la variabile con scala più grande (Population: PC1 al ). Dopo lo z-score gli autovalori sommano a .
Limiti. Lineare; non preserva la struttura locale né i manifold. t-SNE: probabilità gaussiane in alta dimensione, t di Student in bassa, minimizza ; iperparametro perplexity; locale, solo per visualizzare, non scala. UMAP: grafo fuzzy, più veloce, più struttura globale, usabile per feature; parametri n_neighbors, min_dist.
Errori tipici: non standardizzare; statistiche sul dataset intero; leggere le distanze tra cluster in t-SNE/UMAP; ignorare lo scree plot.