Principal Component Analysis

I wanted to reblog and translate this “post” in Italian, because-IMHO-is a well written article and deserves to be read by all those who follow my blog.

Ho voluto fare il reblog e tradurre questo “post” in italiano, perchè -IMHO- è un articolo ben scritto e merita che sia letto da tutti coloro che seguono il mio blog.


Analisi delle Componenti Principali

Pubblicato il 28 Giugno 2012 da

Problema: Ridurre la dimensione di un insieme di dati, traducendo ogni punto di dati in una rappresentazione che cattura le caratteristiche “più importanti”.

Soluzione: in Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy
def principalComponents(matrix):
# Columns of matrix correspond to data points, rows to dimensions.
deviationMatrix = (matrix.T - numpy.mean(matrix, axis=1)).T
covarianceMatrix = numpy.cov(deviationMatrix)
eigenvalues, principalComponents = numpy.linalg.eig(covarianceMatrix)
# sort the principal components in decreasing order of corresponding eigenvalue
indexList = numpy.argsort(-eigenvalues)
eigenvalues = eigenvalues[indexList]
principalComponents = principalComponents[:, indexList]
return eigenvalues, principalComponents

Discussione: Il problema della riduzione della dimensione di un insieme di dati in modo significativo si manifesta in ogni campo della analisi dei dati moderna. Vengono usate tecniche sofisticate per selezionare le dimensioni più importanti, e tecniche ancor più sofisticate per capire cosa significhi essere “importante” per una dimensione.

Un modo per risolvere questo problema consiste nel calcolare le componenti principali di un insieme di dati. Per questo metodo, viene definita “importante” la direzione lungo la quale si sviluppa la variabilità maggiore. Si noti che queste “direzioni” sono vettori che possono incorporare una porzione di molte o di tutte le dimensioni “standard” del caso in esame. Per esempio, l’immagine presentata qui sotto ha, come è possibile vedere, due differenti dimensioni intrinseche rispetto agli assi standard.

Il lettore abituale di questo blog può riconoscere questa idea dal nostro post su “eigenfaces“. Infatti, le eigenfaces sono semplicemente le componenti principali di un dataset di immagini di volti. Qui discuteremo brevemente come funziona l’algoritmo, ma lascieremo il perché al post su “eigenfaces”. L’interpretazione fondamentale da fare è che trovare le componenti principali costituisce una trasformazione lineare dei dati (cioè, sono consentiti solo operazioni come rotazione, traslazione, scalatura, taglio, ecc) che sovrappone le frecce nere sopra sugli assi standard. Nel gergo dell’algebra lineare si può dire che stiamo ri-rappresentando i dati rispetto ad una conveniente base ortonormale di autovettori.

Qui noi rappresentiamo il primo set di dati come una matrice le cui colonne sono i punti dati, e le cui righe rappresentano le diverse dimensioni. Ad esempio, se si trattasse di dati finanziari poi le colonne potrebbero essere i casi di tempo in cui i dati sono stati raccolti, e le righe potrebbero rappresentare i prezzi delle materie prime registrati a quei tempi. Da qui calcoliamo due proprietà statistiche del dataset: la media datapoint, e la deviazione standard di ciascun punto dati. Questo viene fatto sulla linea 6, in cui le operazioni aritmetiche sono “entrywise” (una comoda funzione di biblioteca NumPy di Python).

Successivamente, si calcola la matrice di covarianza per i punti dati. Cioè, interpretando ciascuna dimensione come una variabile casuale ed i punti di dati sono osservazioni di tale variabile casuale, vogliamo calcolare come le diverse dimensioni sono correlati. Un modo per stimare tale da un campione è calcolare il prodotto scalare dei vettori di deviazione e dividere per il numero di punti di dati. Per maggiori dettagli, vedi questa pagina di Wikipedia [in inglese] [in italiano].

Ora (di nuovo, per ragioni che abbiamo dettaglio nel nostro post su “eigenfaces”), gli autovettori della matrice di covarianza puntano nelle direzioni di massima varianza, e la grandezza degli autovalori corrispondono alla grandezza della varianza. Ancor più, per quanto riguarda le dimensioni a variabili casuali, la correlazione tra gli assi di questa nuova rappresentazione è zero! Questo fa parte del motivo per cui questo metodo è così potente: rappresenta i dati in termini di caratteristiche indipendenti. Un aspetto negativo di questo è che le caratteristiche dei componenti principali possono non avere una interpretazione, trattabile in termini di fenomeni della vita reale.

Infine, una cosa comune da fare è usare solo le prime componenti principali, dove come ‘prime’ intendiamo quelle i cui autovalori corrispondenti sono più grandi. Poi si proiettano i punti di dati originali sulle componenti principali scelte, controllando così precisamente la dimensione dei dati viene ridotta. Una domanda importante è: come si fa a decidere quante componenti principali da usare?

Poiché le componenti principali con autovalori più grandi corrispondono a caratteristiche con maggiore variabilità, si può calcolare la variazione totale rappresentata con un dato insieme di componenti principali. Qui, la ‘variazione totale’ è la somma della varianza di ciascuna delle variabili casuali (cioè, la traccia della matrice di covarianza, cioè la somma dei suoi autovalori). Poiché gli autovalori corrispondono alla variazione delle componenti principali scelti, possiamo naturalmente calcolare la variazione rappresentato in proporzione. In particolare, se sono gli autovalori delle componenti principali scelte, ed è la traccia della matrice di covarianza, allora la variazione complessiva delle componenti principali è semplice.

In molti casi di dati elevate dimensioni, si può incapsulare più del 90% della variazione totale utilizzando una piccola frazione dei componenti principali. Nel nostro post su eigenfaces abbiamo usato un set di dati relativamente omogeneo di immagini, il nostro algoritmo di riconoscimento che abbiamo usato funziona abbastanza bene con solo circa 20 di 36.000 componenti principali. Nota: sono stati usati anche alcuni “trucchi” dell’algebra lineare per calcolare solo i principali componenti che hanno autovalori non nulli. In ogni caso, è chiaro che se i dati sono abbastanza “ben messi”, l’analisi delle componenti principali è uno strumento molto potente.


Vorrei aggiungere alcune righe a questo articolo.

L’analisi delle componenti principali, non serve solo alla riduzione della mole di informazioni di un insieme di dati, ma serve anche a mettere in evidenza quali siano le informazioni più significative “nascoste” in tale mole.

L’eliminazione delle componenti principali con l’importanza minore ( diamo a tale termine la stessa accezione che l’autore gli da nel suo articolo ) consente anche di eliminare il “rumore” presente in tali dati, in quanto di solito il rumore gaussiano per definizione è a media nulla ed entropia informativa massima, ovvero informazione zero.

Quindi, questo metodo di analisi dei dati, può servire sia a “ripulire” i dati dal rumore e dalle informazioni sperflue, sia ad effettuare una compressione ( in perdita o “lossy” ) dei dati originali.

Ma può servire anche ad altro, e, penso che ne parleremo in un altro articolo 🙂

Math ∩ Programming

Problem: Reduce the dimension of a data set, translating each data point into a representation that captures the “most important” features.

Solution: in Python

Discussion: The problem of reducing the dimension of a dataset in a meaningful way shows up all over modern data analysis. Sophisticated techniques are used to select the most important dimensions, and even more sophisticated techniques are used to reason about what it means for a dimension to be “important.”

One way to solve this problem is to compute the principal components of a datasetFor the method of principal components, “important” is interpreted as the direction of largest variability. Note that these “directions” are vectors which may incorporate a portion of many or all of the “standard” dimensions in question. For instance, the picture below obviously has two different intrinsic dimensions from the standard axes.

The regular reader of this blog may recognize this…

View original post 643 altre parole

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...